Laravel でローカルでメール送信が行われる作業でメール送信を確認しつつ外部にメールが送られてしまうのを防ぎたい時、MailCatcherでキャッチしてしまうと便利です。
MailCatcher は Ruby で書かれた疑似 SMTPサーバーで、アプリケーションから送信したメールをブラウザで確認できる定番ツールです。
メールをHTMLで表示する以外にもテキストで表示したりメールのDLやソースの表示も可能。
もちろんLaravelだけでなく、メールの送信にSMTPを利用するすべてのアプリケーションに利用できます。
間違って本番のメールアドレスがDBに入っていても顧客にテスト環境のメールが送信されるのを防げます。
インストール
1 |
$ gem install mailcatcher |
※ もしここでパーミッションエラーが出た場合、sudo
をつけるのではなくrbenv
やbundlerを併用することをオススメします。
デーモン起動
1 2 3 4 5 |
$ mailcatcher Starting MailCatcher ==> smtp://127.0.0.1:1025 ==> http://127.0.0.1:1080 *** MailCatcher runs as a daemon by default. Go to the web interface to quit. |
表示されたURL (http://127.0.0.1:1080
)にブラウザでアクセスしてみます。
インストールが完了しました。起動時にコマンドラインオプションを付加すればポートやIPの指定をしたり、ブラウザを自動的に起動することも可能です。
Laravel側の設定
デフォルト設定の場合、.env
nのメールサーバーの設定当該項目をを以下のように変更します。
1 2 3 |
MAIL_DRIVER=smtp MAIL_HOST=127.0.0.1 MAIL_PORT=1025 |
他の項目はnullのままでおk.
では、試しにartisan tinker
から送信してみます。
1 |
Mail::raw('test', function($mail){$mail->to('example@example.com');}); |
すると即座にMailCatcherの画面に表示されました。
その他の手段
Laravelの公式ドキュメントではlogドライバ、送信先の強制、Mailtrapが上げられています。このMailCatcherはMailtrapの簡易ローカル版のようなものです。
“MailCatcher でメールを外部に送信せずにキャッチする” への1件の返信