Chapter 08無料公開

MailHogの起動

ArkBig
ArkBig
2022.05.14に更新

大量のメール送信テストで社内SMTPをパンクさせると怒られます。気を付けましょう。

そんな時ダミーのメールボックスがあると安心なのでMailHogを構築します。

https://github.com/mailhog/MailHog

MailHogを利用するとブラウザでメールを確認できて便利です。MailHogを使うとどんなメールアドレス宛でもブラウザ上で確認できるので、宛先切り替えアルゴリズムの動作確認にも使えます。

本章はarkbig/devbaseリポジトリのcompose.yamlの一部の説明になります。

https://github.com/arkbig/devbase

本章で説明するファイル
📂 devbase/
└── 📄compose.yaml

compose.yaml(抜粋)

MailHogは公式イメージmailhog/mailhogをそのまま使い設定は何もしていません。次がdockerで使用するcomposeファイルです。

compose.yaml ※Shift+マウスホイールで横スクロール
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に保存もできるようです。

https://github.com/mailhog/MailHog/blob/master/docs/CONFIG.md

スクリーンショット

メールボックス
メールボックス

メール内容
メール内容

✔️本章の作業チェックリスト