Docker で Mailhog を利用する方法については、たくさんの良い記事があります。
こちらに記載されている参考サイトでも、かなり詳しく解説されているので、こちらの解説通りで問題なく、Mailhog を利用することができると思います。
Docker環境にメールサーバー構築でMailhogを利用する
本記事では、私自身がはまったポイントを中心にまとめています。
少しでも参考になれば幸いです。
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
volumes: db-volume: maildir: {} #メールサーバのコンテナ mail: image: mailhog/mailhog container_name: mailhog ports: - "8025:8025" environment: MH_STORAGE: maildir MH_MAILDIR_PATH: /tmp volumes: - maildir:/tmp |
※Volumeが必要な理由は、こちらの記事が参考になります。
https://zenn.dev/naoki0722/articles/5b8bd8fdc22bb8#volume-%E3%81%AE%E8%A8%AD%E5%AE%9A
Docker 再ビルド
1 2 3 4 5 |
# イメージのビルド $ docker-compose build # コンテナ起動 $ docker-compose up -d |
コンテナ確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[+] Running 8/8 - mail Pulled 27.9s - df20fa9351a1 Pull complete 1.7s - ed8968b2872e Pull complete 2.3s - a92cc7c5fd73 Pull complete 2.8s - f17c8f1adafb Pull complete 21.8s - 03954754c53a Pull complete 22.5s - 60493946972a Pull complete 23.2s - 368ee3bc1dbb Pull complete 24.0s [+] Running 6/6 - Volume "laravel_docker_maildir" Created 0.1s - Container mailhog Started 26.4s - Container laravel_docker-node-1 Started 24.2s - Container laravel_docker-db-1 Started 25.9s - Container laravel_docker-php-1 Running 0.0s - Container laravel_docker-nginx-1 Started 25.3s |
画面確認
http://localhost:8025 にアクセスし、Mailhog の表示を確認する。
Laravel の.env を修正
1 2 3 |
MAIL_HOST=mail MAIL_PORT=1025 MAIL_FROM_ADDRESS=info@hoge.com |
メール送信テスト
1 2 3 4 5 6 7 |
php artisan tinker Psy Shell v0.11.9 (PHP 8.0.26 — cli) by Justin Hileman > Mail::raw('テストメール',function($message){$message->to('test@hoge.com')->subject('テスト');}); = null > |
メールが正常に送信されると、下記のようにメールが受信できます。
下記のエラーメッセージが表示される場合には、mailer の設定が出来ていないと思います。
InvalidArgumentException Mailer [mail] is not defined.
必要に応じて、 下記のファイルを見直してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
config\mail.php 'mailers' => [ ・・・略・・・ 'mail' => [ 'transport' => 'smtp', 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 'port' => env('MAIL_PORT', 587), 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, 'auth_mode' => null, ], ・・・略・・・ ], |
また、設定関連のキャッシュが残っている場合があります。
キャッシュを消す方法は、こちらの記事を参照してください。
まとめ
開発環境では、メールテストなど頻繁に行うことが多いと思います。
ぜひ、Mailhog を活用して、開発効率が良くなればと思います。