LaravelでSMTPサーバーを使ったメールの送信テストを行うには、MailHog, MailTrap, MailCatcher といったツールが役立ちます。
Homesteadを使っている場合には、あらかじめMailhogがついてきます。Dockerでもわりと手軽に入れられるようです。
通常のローカル環境ではMailTrapが便利です。どうもうまくいかない!という場合は、MailCatcherなども試してみてください。
それぞれの方法を解説しますね。
LaravelでSMTPを使ってメール送信テスト環境を作れるツール3選
まずMailHogについてですが、わたし自身はHomestead環境の時に利用しています。こちらでの使い方を解説しますね。
Mail Hog
LaravelのHomestead環境の構築方法は別の記事で説明しています。
Homesteadをいれたときに、自動でMailHogが入ってくるので、インストールの必要はありません。
ただ.envファイルの設定は次のように変えておきましょう。
【.env】
1 2 3 4 5 6 |
MAIL_DRIVER=smtp MAIL_HOST=localhost MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null |
あとはメール送受信のためのコードを書きます。実際にメールを送信した後、
を開いてください。メールが確認できます。
2023/3/15追記
なおLaravel Sailでは、Mail Hogがデフォルトで使えるようになっていました。ですが現在は、Mail Hogに変わり、Mailpitというツールがデフォルトでセットされるようになっています。
特に何もしなくとも、Laravel Sailを立ち上げた状態で下記にアクセスすると、メールを確認できます。
MailTrap
次にMailTrapについてですが、こちらは、まず登録をしておきましょう。
ログイン後、Add Inboxをクリック。名前をつけてInboxを保存します。
Action下の歯車アイコンをクリック。
設定画面が表示されます。SMTP Settings/Integarationsのプルダウンメニューで Laravel を選びます。copyボタンを教えてコピーします。
そのままコピーすると、パスワードが正しくコピーできないので、注意してください!
ここにある情報を プロジェクトの.envファイルに入れます。
(入力例)
1 2 3 4 5 |
MAIL_MAILER=smtp MAIL_HOST=sandbox.smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=aaaaaaaaaaa MAIL_PASSWORD=bbbbbbbbbbb |
これで完了です。メールを送信するとMailTrapのプロジェクトの中で確認できます。
MailTrap注意点
MailTrapでbccのメールアドレスをひとつ設定してメールを送ると、次のような不具合が発生しました。
- bcc先にメールが送られない
- toの宛先に3通メールが重複して送信される
どうもおかしい、と思い検索してみたところ、同じようなエラーを経験した人の投稿を見つけました。
上記リンク先のエラー報告への返事を、下記に一部引用します。どうやらMailTrapでは、こういった現象が起こるようです。
【上記投稿抜粋】
If you BCC an email and send it through mailtrap.io, you will receive two copies of the email in your mailbox. If there are two BCCs, you will receive three copies, etc. The emails will look identical (including the “To:”).
This behavior is specific to mailtrap.io, not Laravel.
*2023/3/15追記
現在は、MailTrapでBCCを利用するには、有料版を利用する必要があります。
MailCatcher
MailTrapは手軽で良いツールですが、「なぜかうまくいかなかった」という感想を伺ったことがあります。
わたし自身は経験がないので原因が分からないのですが。
もしダメだった場合には、MailCathcerなど、他のツールも試してみてください。
MailCatcherについては別記事にて解説しています。