Laravelでメールを送信するアプリケーションを開発している間は、実際のメールアドレスにメールを送信したくはありません。ローカルでの開発環境ではMailHogを使って、「ダミー」のメールボックスへメールメッセージを送る方法がとても便利です。
以前の Laravel5の環境をdockerで構築した記事 の続きです。
環境
- Laravel 5.8.3
- PHP 7.3.4
Laravel環境構築してテストメールを送信するまで
$ git clone git@github.com:ucan-lab/docker-laravel5.git
$ cd docker-laravel5
$ docker-compose up -d --build
$ docker-compose exec app composer create-project --prefer-dist "laravel/laravel=5.8.*" .
ここまでのコマンドでLaravelの環境構築が完了です。
$ docker-compose exec app ash
$ sed -i -e "s/MAIL_HOST=.*/MAIL_HOST=mail/" .env
$ sed -i -e "s/MAIL_PORT=.*/MAIL_PORT=1025/" .env
$ php artisan tinker
Mail::raw('test mail',function($message){$message->to('test@example.com')->subject('test');});
.env
の MAIL_HOST
と MAIL_PORT
の設定を書き換えます。
tinkerを起動して、テストメールを送信してみます。
テストメールを受信できていればokです。
MailHog とは
MailHogは開発者向けの電子メールテストツールです。
Laravelで送信したメールの内容をブラウザ上で確認できます。
宛先に設定した実際のメールアドレス宛には送信されません。
Homebrewでインストールできたり、DockerHubにイメージが公開されているので導入が非常に簡単です。
- SMTPサーバーの標準ポートは
1025
- HTTPサーバーの標準ポートは
8025
- メモリ内のメッセージストレージを使用(コンテナを再起動するとクリアされる)
- 届いたメールはほぼリアルタイムで受信トレイに表示
docker-compose.yml の設定例
実際の設定はこちらのご参考ください。
https://github.com/ucan-lab/docker-laravel5/pull/8/files
DockerHubにMailHogのイメージが登録されているので、
docker-compose.yml で指定すると簡単に導入できます。
# docker-compose.yml
mail:
image: mailhog/mailhog
ports:
- ${MAILHOG_PORT}:8025
Laravel側の .env
の MAIL_HOST
には コンテナ名を指定します。
MAIL_PORT
には MailHog の SMTP のポート番号を指定します。
# .env
MAIL_HOST=mail
MAIL_PORT=1025