Laravel(6.x) ローカルでメール送信確認をする方法

LaravelでAuth機能を簡単に導入できますが、
通常ローカル開発環境ではメール配信サーバがないので
外部へメールの送信ができません

メールテストのmailtrapサービス

ローカル開発で簡単にメール確認をする方法として
mailtrap というサービスがあります
個人開発レベルであればFreeの無料版で十分使えます
また、GithubアカウントでSignUpもできます

mailtrapでSMTPアカウントを確認する

mailtrapにログインすると Inboxes > Demo inbox と進んでいきます

Demo inboxを確認すると SMTP Settingsのタブから
SMTPの設定が確認できます

赤枠先のところを確認しておきます

Laravelの.envに設定する

Laravelの.envを確認してみましょう
メールの設定はデフォルトでは以下のようになっています

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

MAIL_HOSTを見てみると・・・実はmailtrapがデフォルトで入っています
先程mailtrapで確認したUsername、Passwordをそれぞれセットしましょう
MAIL_FROM_ADDRESSも入っていないとエラーになるので適当に入れておきます

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=XXXXXXXXXXXXXX(mailtrapのUsername)
MAIL_PASSWORD=XXXXXXXXXXXXXX(mailtrapのPassword)
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=no-reply@local.com
MAIL_FROM_NAME="${APP_NAME}"

メールを送信してみる

LaravelのAuth機能を使って、メールの送信を確認してみたいと思います
Auth機能の導入がわからない人は以下記事を参照ください

※1点補足させてください、上記記事では usersテーブルに
emailなどのカラムがないので以下コマンドも合わせて実行すると大丈夫です
テーブルがドロップされるのでバックアップが必要な人は取っておいてくださいね

php artisan migrate:fresh

usersテーブルはmigrationが用意されているのでmigrateで作り直すことで
ユーザー登録に必要なカラムも含めて作成されます

では、改めて、サーバを起動して、画面を表示します
画面の右上のREGISTERへ遷移

登録項目を入力して Registerを押します
E-Mail Addressも適当なメールアドレスで構いません

Registerを押すと登録が完了します

ここで一度サインアウトします
そして今度はLOGINのほうに遷移します

Forgot Your Password?のリンクを押してパスワードリセット画面に遷移します

先程登録ユーザー登録したメールアドレスを入力してResetを押しましょう
パスワードリセットのリンクを送信しました とメッセージが表示されます

mailtrapに届いたメールを確認する

Demo inboxの中を再度確認します
すると、パスワードリセットを行ったメールアドレスに対してのメールが
届いているのが確認できると思います

mailtrapの画面で、スマホアイコン・タブレットアイコンに切り替えることで
それぞれの画面でどう見えるかも確認できます
また、HTMLメールがデフォルトタブで選択されていますが
Textメールなどもタブを切り替えることで確認でき、非常に便利だと思います

まとめ

これまではメールサーバないため、サーバにアップしてテストする
こともあったと思います
その際にメール誤送信などしてインシデントを発生させたり・・・
ローカル開発環境で使え、かつ実際のメールアドレスに届くわけではないので
メールテストに非常に有用だと思います