大量のメール送信テストで社内SMTPをパンクさせると怒られます。気を付けましょう。
そんな時ダミーのメールボックスがあると安心なのでMailHogを構築します。
MailHogを利用するとブラウザでメールを確認できて便利です。MailHogを使うとどんなメールアドレス宛でもブラウザ上で確認できるので、宛先切り替えアルゴリズムの動作確認にも使えます。
本章はarkbig/devbaseリポジトリのcompose.yamlの一部の説明になります。
📂 devbase/
└── 📄compose.yaml
compose.yaml(抜粋)
MailHogは公式イメージmailhog/mailhogをそのまま使い設定は何もしていません。次がdockerで使用するcomposeファイルです。
services:
mailhog:
image: mailhog/mailhog
restart: unless-stopped
ports:
- 127.0.0.1::1025
- 127.0.0.1::8025
labels:
- traefik.enable=true
# SMTP側
- traefik.tcp.routers.mailhog-${COMPOSE_PROJECT_NAME:-devbase}.entrypoints=smtp
- traefik.tcp.routers.mailhog-${COMPOSE_PROJECT_NAME:-devbase}.rule=HostSNI(`*`)
# stunnelというソフトを使って中継するとTLS接続もできそう
# - traefik.tcp.routers.mailhog-${COMPOSE_PROJECT_NAME:-devbase}.rule=HostSNI(`mailhog-${COMPOSE_PROJECT_NAME:-devbase}${DOMAIN:-.dev.test}`)
# - traefik.tcp.routers.mailhog-${COMPOSE_PROJECT_NAME:-devbase}.tls.passthrough=true
- traefik.tcp.services.mailhog-${COMPOSE_PROJECT_NAME:-devbase}.loadbalancer.server.port=1025
# 以前にproxyprotocolがあるとダメだったような気がしたんだけど...
# - traefik.tcp.services.mailhog-${COMPOSE_PROJECT_NAME:-devbase}.loadbalancer.proxyprotocol=false
# HTTPS側
- traefik.http.routers.mailhog-${COMPOSE_PROJECT_NAME:-devbase}.entrypoints=https
- traefik.http.services.mailhog-${COMPOSE_PROJECT_NAME:-devbase}.loadbalancer.server.port=8025
ports:
で127.0.0.1の空きポートをコンテナの1025番ポートと8025番ポートへバインドします。
1025番ポートはSMTP通信でメールを受け取るポート番号で、8025番ポートはHTTP通信でメールを見るポート番号です。
labels:
でTreafikの設定をしています。
SMTP側はtraefik.tcp
、HTTPS側はtraefik.http
の設定となります。
出来ればSMTP側をTLS対応させて、ホスト名でサービス振り分けしたいところですが今のところMailHogは暗号化に対応していないようです。
stunnelというソフトを使って中継すればTLS接続もできそうというところまでは見つけましたが、今回はstunnelに手を出していません。
MailHogを起動する
次のコマンドで起動できます。(TraefikやDnsmasqはすでに起動している想定)
docker compose up -d mailhog
これで、https://mailhog-devbase.dev.test/にアクセスするとメールボックスがみれます。
SMTP送信は「mailhog-devbase.dev.test:25」を指定すればMailHogにメールできます。(実際は*
としているので、ホスト名は届けばなんでもいい)
ダミーのメールボックスなのでメールはインメモリ管理されており、プロセスの再起動で消えます。
残したいメールがあれば、メール内容画面の上にあるアイコンからダウンロードします。またShareアイコンでReleaseという別SMTPへ転送ができるようですが、私はうまく動かせませんでした。
もしくは設定すればMongoDBに保存もできるようです。
スクリーンショット
メールボックス
メール内容