ブログ
これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。
Mailhog の Docker image を利用して Laravel で email の送信テストをできる環境を作る!
こんにちは!
みなさんはlaravel で開発をしていて、
email の送信テストをしたくて困ったことはないでしょうか?
DBの送信先アドレスを自分のアドレスに変更して、
AWS の SES で SMTP サーバーを用意して、
それで送信ボタンを押してメールを確認。
一括で送信する機能のテストなんて
複数のメールアドレスを用意するのも面倒です。
「社内のネットワークからのSMTP送信はすべてトラップする」
みたいな事をやってる会社もあったりしますが、
不具合や人為的ミスでいつの間にか解除されていて、
それに気づかず本番データを用いたテストを気軽にしてしまって、
大量に誤送信してしまった。
なんて経験も聞きます・・・
mailtrap なんてサービスもあったりしますが、
無料版は制限があり引っかかると使用できなくなり厄介です。
そこで今日は、
- 無料で使えて
- 制限もなく
- 簡単に導入できて
- 簡単にブラウザで確認できる
そんな夢のような mailhog の導入方法を解説します。
Requirements
- Laravel 8
- Docker 20.10.8
- Docker compose 1.29.2
別に多少 version が違っても問題なく動くと思います。
Add a service to docker-compose.yml
mailhog は公式で docker image が公開されています。
docker-compose の service に追加しましょう。
services:
...他サービスは省略...
container_mailhog:
image: mailhog/mailhog
ports:
- 8025:8025
port 8025 は web browser で送信メールの確認をする時に使用する port です。
Edit laravel .env file
MAIL_MAILER=smtp
MAIL_HOST=container_mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=info@example.com
MAIL_HOST には docker-compose.yml のサービス名を指定してください。
MAIL_PORT には mailhog の docker image が利用する SMTP 送信ポート 1025 を指定してください。
多分変更できません。
する必要もないですけど。
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
は行を消すと送信時に 500 エラーで失敗します
Start docker services
これで準備は終わりです。
docker を起動しましょう!
$ docker-compose up -d
Makefile を用意している場合はこちら。
$ make daemon
Send test emails
それでは実際にメールを送信してみましょう。
送信機能をまだ実装していなくても laravel の tinker で試せます。
$ docker-compose exec container_php php artisan tinker
container_php の部分は laravel が動いているサービス名を指定してください。
Makefile で指定している場合は
$ make tinker
等で tinker を起動してください。
Psy Shell v0.10.8 (PHP 8.0.12 — cli) by Justin Hileman
>>> Mail::raw('test email body', function ($email) { $email->to('hoge@piyo.com')->subject('test email subject'); });
Enter を押して null が返ってきたら成功です。
Check sent emails by web-browser
以上で送信はできているはずです。
それでは実際に送信されたか確認しましょう。
ブラウザで http://localhost:8025 を開きましょう!
https じゃなくて http です!
あとAWSでやってるひとはセキュリティグループも開けましょう!
先ほど tinker で送信したメールが一覧に表示されていたら成功です!
コメントはありません。