Drupalから添付ファイル付きのメールを送信する

先週、クライアントの1人は、ファイルを添付する機能を備えた管理パネルからサブスクライバーに電子メールを送信したいと考えていました。 もちろん、フォームからWebサイトにファイルをアップロードし、ファイルをダウンロードするためのリンクをレターで送信することはできましたが、そのようなソリューションの特定の利点に加えて、明らかなマイナス、つまりサーバー上の不要なファイルの蓄積により、クライアントにそのような松葉杖のソリューションを提供することさえできませんでした。



したがって、幸いなことに、原則として、Drupalで自転車を発明することは非常にまれです;主なことは、drupal.orgで既製のソリューションを見つけることができることです。 私はそれを見つけるのにいくらかの時間を費やさなければならなかったことを認めます、そしてそれは私がこのようなメッセージがあなたがそのような仕事が起こった場合あなたの時間を節約するために書いている理由です



私の選択はMime Mailモジュール(http://drupal.org/project/mimemail)でしたが、他の選択肢は見つかりませんでした。



わかりやすくするために、例で説明を薄めます(顧客のサイトが上位6位だったため、Drupal 6を選択します)。 まず、手紙を入力してファイルを添付するフォームを作成します。



function custom_mail_form() { $form['#attributes'] = array('enctype' => "multipart/form-data"); //       $form['mail_to'] = array( '#type' => 'textfield', '#title' => t('E-mail'), '#required' => TRUE, ); $form['mail_subject'] = array( '#type' => 'textfield', '#title' => t('Subject'), '#required' => TRUE, ); $form['mail_body'] = array( '#type' => 'textarea', '#title' => t('Body'), '#required' => TRUE, ); $form['mail_attachment'] = array( '#type' => 'file', '#title' => t('Attachment'), ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Send'), ); return $form; }
      
      







タスクによっては、新しいフォームを作成できませんが、form_alterフックを使用してファイルフィールドとハンドラー関数を追加することにより、既存のフォームを変更できます。



フォームデータの検証については説明しません。少なくとも「mail_to」フィールドは検証する必要があることに注意してください。 このフォームのハンドラーをすぐに記述します。



 function custom_mail_form_submit($form, &$form_state) { $folder = file_directory_path()."/mail/"; //  ,       ,         $attachment = array(); //       if ($file = file_save_upload('mail_attachment', array(), $folder)) { //   $attachment[] = $file; //         } //      , ,  ,     if (module_exists('mimemail')) { // ,    $message_result = mimemail( //   mimemail,        variable_get('site_mail', ini_get('sendmail_from')), //   $form_state['values']['mail_to'], //   $form_state['values']['mail_subject'], //   $form_state['values']['mail_body'], //     HTML,    ,    TRUE TRUE, //   ,        plaintext array(), //            check_plain($form_state['values']['mail_body']), //          plaintext,   check_plain()         html  $attachment, //        files,         '' //        ,    ); //   TRUE,     if($message_result) //     drupal_set_message("Mail was sent to ".$form_state['values']['mail_to']); else drupal_set_message("Mail was not sent to ".$form_state['values']['mail_to'], "error"); if(count($attachment)) file_delete($attachment[0]->filepath); //       ,      } else{ drupal_set_message("Please install <a href="http://drupal.org/project/mimemail">Mime Mail</a> module ".$mail, "error"); //        } }
      
      







これがどのように機能するかを理解するには、コード内のコメントで十分です。 受信者は、1つのファイルが添付されたレターを受け取ります...



Mime MailモジュールのREADME.txtにあるmimemail()関数の使用について詳しく読むことができます。



PS:資料とコメントについての議論をありがとう。 コメントに加えて、貴重なコメントが書かれた手紙をいくつか受け取りました。 私はrrromkaが私に書いたものを共有する価値があると思う:



「ユーザーがニュースレターを明示的に購読しているかどうかに関係なく、登録済みのすべてのユーザーに(たとえば、役割によるフィルターを使用して)レターを送信できます。 drupal.org/project/simplenews_rolesモジュールを配置する必要があります。次に、admin / content / simplenews /目的のメーリングリスト(メーリングリストはsimplenewsを自動的に作成する辞書からの用語)の設定を入力して、このメーリングリストにアタッチするロールのユーザーを示します。 そして、いつものように、「ニュースレター」タイプの素材を作成し、ニュースレターを選択して送信します。



この発言は、ほぼすべての典型的な問題がdrupal.orgですでに解決されていることを示しています。検索するだけで、専門のフォーラムで質問し、さらに練習するだけです:-)






All Articles