ウェブサーバー、アプリケーションサーバー、データベースサーバーが用意されていれば最低限Laravelを動作させることはできますが、実際に開発を進めてくるとメールを送信する処理を書くことが多くあります。
ローカルでのメール確認のためにメールサーバーを用意して、たくさんのメールアカウントを作って、メールを送信して、各メールアカウントでログインして確認...するのはとても非効率です。
そこでメール送信テストツールのMailHogというツールが公式のDockerイメージが提供されています。
こちらを利用すると実際にメールを送信することなく、メール内容をWeb UIで確認できます。
MailHog
開発者向けのメールテストツール
前提
最強のLaravel開発環境をDockerを使って構築する【新編集版】
当記事は上記の記事の補足になる記事です。
Laravel環境構築
$ git clone git@github.com:ucan-lab/docker-laravel.git
$ cd docker-laravel
$ make create-project
まずはサクッと環境構築します。
環境
- PHP 8.1.5
- Laravel 9.9.0
手順
docker-compose.yml を編集する
$ docker compose down
※docker-compose.yml
や Dockerfile
を変更する場合は予めコンテナを破棄しておくと良いです。
services:
mailhog:
image: mailhog/mailhog
ports:
- target: 8025
published: ${MAILHOG_PUBLISHED_PORT:-8025}
protocol: tcp
mode: host
mail
サービスの設定を services
配下に追記します。
特にカスタマイズは必要ないので、公式のMailHogイメージをそのまま利用します。
$ docker compose up -d
コンテナを作成して起動します。
$ docker compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------
docker-laravel_app_1 docker-php-entrypoint php-fpm Up 9000/tcp
docker-laravel_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
docker-laravel_mail_1 MailHog Up 1025/tcp, 0.0.0.0:8025->8025/tcp
docker-laravel_web_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
mail
のコンテナが起動していればokです。
src/.env
.env
の環境設定ファイルが下記の値になっていることを確認します。
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_FROM_ADDRESS="hello@example.com"
※デフォルト値です。
メール送信テスト
$ docker compose exec app php artisan tinker
Mail::raw('test mail',function($message){$message->to('test@example.com')->subject('test');});