Laravel にも、メール送信を実装する方法がいくつかあります。
その中でも、代表的な実装方法である Mailable を利用した方法を解説いたします。
ぜひ、ご参考にしていただければと思います。
Mailableクラスの作成
下記コマンドを実行し、Mailableクラスのファイルを生成します。
1 |
$ php artisan make:mail SampleMail |
INFO Mailable [app/Mail/SampleMail.php] created successfully.
appディレクトリ直下にMailディレクトリが作成されて、その中に SampleMail.php ファイルが作成されます。
SampleMail.phpには下記のように実装します。
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 |
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class SampleMail extends Mailable { use Queueable, SerializesModels; /** * Create a new message instance. * * @return void */ public function __construct($name, $email) { $this->name = $name; $this->email = $email; } /** * Build the message. * * @return $this */ public function build() { return $this->to($this->email) ->subject('サンプルタイトル') ->view('mail.sample') ->with([ 'name' => $this->name, ]); } } |
メール本文の作成
メール本文用の blade ファイルを作成します。
1 2 3 4 |
{{ $name }} さん こんにちは。 メール送信テストです。 |
Controller
次に、コントローラーの中でMailableクラスを利用してメール送信機能を実装します。
ルーティングの設定を行います。
1 |
Route::get('/mail/send', 'MailController@send'); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; use App\Mail\SampleMail; class MailController extends Controller { public function send(Request $request) { $name = 'テスト ユーザー'; $email = 'test@hogehoge.com'; Mail::send(new SampleMail($name, $email)); return view('test'); } } |
送信エラー
メールサーバーの設定をしていない場合には、下記のエラーが表示されます。
Connection could not be established with host "mailpit:1025": stream_socket_client(): php_network_getaddresses: getaddrinfo for mailpit failed: Name or service not known
このエラーは、 メールサーバーの設定をすることで解決できます。
メールサーバーを設定するファイルは、 .env になります。
.env
1 2 3 4 5 6 7 8 |
MAIL_MAILER=smtp MAIL_HOST=mailpit MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" |
添付ファイルの送信
添付ファイルを送信する方法については、こちらのサイトが参考になると思います。
公式サイト
https://readouble.com/laravel/10.x/ja/mail.html
https://readouble.com/laravel/10.x/ja/mail.html
参考サイト
Laravelでメール送信機能を実装
https://qiita.com/masakichi_eng/items/334a382a75f14339e6f5
Laravelでメール送信を行う方法を紹介
https://migisanblog.com/laravel-mail-send/#index_id4