Laravel でメール送信の設定を行います。
ここではメールの送信先として mailtrap.io を使用してメールの送信テストを行います。
mailtrap.io
mailtrap.io は開発で使用する SMTP のダミーサーバーです。mailtrap.io に対して送信したメールは TO で指定したメールアドレスには配信されず、mailtrap.io の管理画面でそのメールを確認することができます。無料で使えるのでメールのテストにとても便利です。
まずは、mailtrap.io に Sign up してください。
Login すると、デフォルトで1つ受信ボックスが作成されています。
その受信ボックスに表示されている SMTP 情報を確認してください。
メールの設定
Mail の設定ファイルは以下の2ファイルになります。
- .env
- config/mail.php
.env
.env は開発やステージング、本番環境などで環境ごとに変更したい情報をまとめておくファイルです。そこに、メールの設定を行います。
MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=XXXXX MAIL_PASSWORD=XXXXX MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=test@example.com MAIL_FROM_NAME="テスト送信者名"
上記は mailtrap.io に向けてメールを送信する設定です。
XXXXX の部分は mailtrap.io から発行された Username, Password に置き換えてください。
なお、gitを使っている場合は、.env を .gitignore ファイルに追加して、管理対象から外して下さい。
config/mail.php
config/mail.php がメール設定の本体です。
env () 関数を使って、.env ファイルから値を取得しています。
.env を設定しておけば、特に変更する箇所はありません。
<?php return [ // Mail Driver 'driver' => env('MAIL_DRIVER', 'smtp'), // SMTP Host Address 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), // SMTP Host Port 'port' => env('MAIL_PORT', 587), // From Address 'from' => [ 'address' => env('MAIL_FROM_ADDRESS','hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ], // E-Mail Encryption Protocol 'encryption' => env('MAIL_ENCRYPTION', 'tls'), // SMTP Server Username, Password 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), // Sendmail System Path 'sendmail' => '/usr/sbin/sendmail -bs', // Markdown Mail Settings 'markdown' => [ 'theme' => 'default', 'paths' => [ resource_path('views/vendor/mail'), ], ], ];
メール送信確認
artisan tinker を使って、メール送信できるか確認をしてみます。
php artisan tinker >>> Mail::raw('Test Mail', function($message) { $message->to('somebody@example.com')->subject('test'); }); => null >>>
Mail::raw() でテキストメールを送信ました。
何かエラーになるようでしたら、エラー内容をよく確認して設定を修正してください。
ここで、mailtrap.io の受信ボックスを確認して送信したメールが届いているかを確認します。届いていればメールの環境設定は完了です。
蛇足ですが、ここでは Mail::raw() を使ってテキストメールを送信しました。これは Laravel 5.2 までマニュアルに載っていたメールの送信方法です。Laravel 5.3 からは artisan make:mail を使って、Mailable の派生クラスを生成し、それを使ってメールを送信する方法にかわりました。しかし、ちょっとメールの送信確認がしたいだけの時は手順が多くてとても不便です。その為、ここでは tinker と Mail::raw() を使ってメールサーバーとの疎通確認を行いました。Mail::raw() は Laravel 5.6 の API ドキュメントにも載っていますので非推奨になったわけではないようです。
https://laravel.com/docs/5.2/mail
https://laravel.com/docs/5.6/mail
https://laravel.com/api/5.6/Illuminate/Mail/Mailer.html#method_raw