Docker+LaravelでMailhogを使う


Mailhogとは

メール送信テストツール。Dockerには公式にイメージが用意されている。

Docker環境にMailhogを導入する

環境:
Docker version 18.09.2
docker-compose version 1.23.2
Laravel Framework 5.5.45

以下に環境変数を変更。

/laradock/docker-compose.yml
version: '3'

### Mailhog ################################################
    mailhog:
      build: ./mailhog
      ports:
        - "1025:1025"
        - "8025:8025"
      networks:
        - frontend
        - backend
      image: mailhog/mailhog #追加
/laravelプロジェクト/.env
MAIL_DRIVER=smtp
# MAIL_HOST=smtp.mailtrap.io
MAIL_HOST=mailhog
# MAIL_PORT=2525
MAIL_PORT=1025
# MAIL_USERNAME=null
MAIL_USERNAME=任意のユーザー名
# MAIL_PASSWORD=null
MAIL_PASSWORD=任意のパスワード
MAIL_ENCRYPTION=null

コンテナ起動

$ docker-compose up -d --build nginx mysql mailbag workspace ...

# コンテナ確認
 docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                     PORTS                                            NAMES
eddbac17aed5        mailhog/mailhog       "MailHog Mailhog"        4 seconds ago       Up 2 seconds               0.0.0.0:1025->1025/tcp, 0.0.0.0:8025->8025/tcp   laradock_mailhog_1
fea975349d03        laradock_mysql        "docker-entrypoint.s…"   3 days ago          Up About a minute          0.0.0.0:3306->3306/tcp, 33060/tcp                laradock_mysql_1
# 〜以下省略〜

ブラウザでlocalhost:8025にアクセスして確認

導入完了です!

テスト送信

メールクラスとテンプレートを作成

$ php artisan make:mail TestMail --markdown=email.testmail

以下のフィアルが生成されたのを確認。
/app/Mail/TestMail.php
/resources/views/email/testmail.blade.php

ルートに追加

/routes/web.php
use Illuminate\Support\Facades\Mail;
use App\Mail\TestMail;

Route::get('/testmail', function(){
    Mail::to('[email protected]')->send(new TestMail);
    return 'メール送信完了';
});

ブラウザでlocalhost/testmailにアクセスする。

Mailhogでも確認する。

参考