複数のファイルを添付してメールを送信する方法メモしておきます。
FuelPHPで複数のファイルを添付してメールを送る方法
メール送信入力画面に以下のようなファイル添付フォームを用意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?= Form::open(['action' => '/path/to/controller/send', 'method' => 'post', 'enctype' => 'multipart/form-data']); ?> … <?php foreach($file_numbers as $index => $file_number):?> <li> <dl> <dt>添付資料<?php echo $index ?></dt> <dd> <input type="file" name="<?php $file_number ?>”> </dd> </dl> </li> <?php endforeach;?> <p> <input type="submit" value="送信する" onClick="return confirm('メール送信します。よろしいですか?');"> </p> … <?= Form::close(); ?> |
ファイルの添付はattachメソッドを使います。このメソッドは、config/email.phpのattach_pathsにセットされたパスの中からファイルを検索します。パラメーターは以下の通りです。
第一引数は必須です。
- $file string
false。同封したいファイルのパス。
- $inline bool
false。インラインでファイルを添付するかどうか。
- $cid string
null。コンテンツ ID 。インライン画像として添付する場合に使用。
- $mime string
null。デフォルトでは、mimetype は core/config/mimes の配列から検索。
- $name string
null。上書きする添付名。
\Input::post()でメールアドレスや本文などのメール送信内容を取得し、\Upload::get_files()で添付ファイルを取得します。
取得した添付ファイルをforeach()でまわし、バリデートに成功した場合、メールにファイルを添付します。
その後はいつものメール送信のように、送信先メールアドレス・送信元メールアドレス・題名・本文をセットし、完了です。
本文はnl2br()関数を使い、改行文字の前にHTMLの改行タグを挿入しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | /** * 複数ファイルを添付してメール送信 */ public function post_send() { try { // 送信内容取得 $params = \Input::post(); // 全ファイル取得 $file_details = \Upload::get_files(); // インスタンス生成 $email = \Email::forge(); // メールにファイル添付 $target_file_index = 0; foreach ($file_details as $file_no => $file_detail) { if ($file_detail['name']) { $target_file_index = $file_no; // ファイルバリデーション $file_valid = \Upload::is_valid($target_file_index); if (! $file_valid) { throw new \Exception(); } // 対象のファイルを取得 $upload_file_detail = \Arr::get(\Upload::get_files(), $target_file_index); $file = $upload_file_detail['file']; // 対象ファイルのパスとファイル名取得 $path_and_name = explode('/', $file); $tmp_path = DS . $path_and_name[1] . DS; $tmp_name = $path_and_name[2]; // 対象ファイルを添付 $email->attach($tmp_path.$tmp_name, false, null, null, $file_detail['name']); } } $email->to($params['email']) ->from(sample@example.com) ->subject($params['title']) ->html_body(nl2br ($params['message'])) ->send(); } catch (\EmailValidationFailedException $e) { Log::warning($e->getTraceAsString()); Log::warning($e->getMessage()); throw $e; } catch (\EmailSendingFailedException $e) { Log::warning($e->getTraceAsString()); Log::warning($e->getMessage()); throw $e; } catch (\Exception $e) { Log::warning($e->getTraceAsString()); Log::warning($e->getMessage()); throw $e; } } |
以上、複数のファイルを添付してメールを送る方法でした。
参考:
メソッド - Email パッケージ - FuelPHP ドキュメント
fuelphp.jp