ウェブサーバー、アプリケーションサーバー、データベースサーバーが用意されていれば最低限Laravelを動作させることはできますが、実際に開発を進めてくるとメールを送信する処理を書くことが多くあります。

ローカルでのメール確認のためにメールサーバーを用意して、たくさんのメールアカウントを作って、メールを送信して、各メールアカウントでログインして確認...するのはとても非効率です。

そこでメール送信テストツールのMailHogというツールが公式のDockerイメージが提供されています。
こちらを利用すると実際にメールを送信することなく、メール内容をWeb UIで確認できます。

MailHog

開発者向けのメールテストツール

前提

最強のLaravel開発環境をDockerを使って構築する【新編集版】

当記事は上記の記事の補足になる記事です。

Laravel環境構築

$ git clone git@github.com:ucan-lab/docker-laravel.git
$ cd docker-laravel/infrastructure
$ make create-project

まずはサクッと環境構築します。

環境

  • PHP 7.4.6
  • Laravel 7.21.0

手順

infrastructure/docker-compose.yml を編集する

$ infrastructure
$ docker-compose down

docker-compose.ymlDockerfile を変更する場合は予めコンテナを破棄しておくと良いです。

docker-compose.yml
services:
  mail:
    image: mailhog/mailhog
    ports:
      - 8025:8025

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です。

backend/.env

.env
MAIL_HOST=mail
MAIL_PORT=1025
MAIL_FROM_ADDRESS=info@example.com

環境変数にMailHogの設定を追記します。
ホスト名には mail サービス名を設定、MailHogのSMTPは1025ポートがデフォルトで待ち受けています。
それと送信元アドレスの設定が必要です。

メール送信テスト

$ docker-compose exec app php artisan tinker
Mail::raw('test mail',function($message){$message->to('test@example.com')->subject('test');});

http://127.0.0.1:8025

ScreenShot 2020-08-10 2.04.49.png

ScreenShot 2020-08-10 2.04.53.png

参考