MailHogを利用してメール送信テスト環境をdockerコンテナ上に作る


MailHogについて

簡易SMTPサーバーの1種で開発時のメールテストに活用できます。
Docker Hubでコンテナ公開もされているため
導入も非常に簡単です。
GitHub
Docker Hub

今回はあくまで既存dockerプロジェクトにSMTPサーバを追加する形でいきます
docker runにて挙動確認をしたい方は配布元のドキュメントを確認してください

導入方法

docker-compose.ymlへコンテナを追記

docker-compose.yml
mailhog:
  image: mailhog/mailhog
  ports:
    - "8025:8025"

portsに設定している8025はMailHogのデフォルトHTTPポートです。
もしホスト端末からコンテナ上のMailHogへSMTPテストを行う場合は
ports- " 1025:1025"を追記してください

service default port
HTTP server 8025
SMTP server 1025

build後、http://localhost:8025へアクセスするとこんな画面が表示される

あとはMailHogコンテナに対しメールを送信すればこちらの画面で確認できるらしい

メールテスト

同確のためSMTP通信が正常に通るか簡単なプログラムでチェックします

smtp_sample.py
import smtplib
from email.mime.text import MIMEText
def test_mail(fromaddr, toaddr, subject, msg):

    m = MIMEText(msg)
    m['Subject'] = subject
    m['From'] = fromaddr
    m['To'] = toaddr

    s = smtplib.SMTP(host="mailhog", port=1025)
    s.sendmail(fromaddr, toaddr, m.as_string())
    s.close()

    return "done"

受信メールが一覧で表示されます

ソースやヘッダー情報等もブラウザ上から確認できます。

Jimでfailure_test

Jimによる異常系のテストもできるようです。
利用するにはdocker-compose.ymlmailhog部で以下を追記します

command: -invite-jim -jim-accept=0.5

上記の場合50%の確率でメール送信が成功します。(他にも通信速度等も設定可能)
マニュアル上はMailHog 〜にてオプション設定と書いてありますがDocker上でそれを書くと動作しません

各種オプションは以下から確認してください
Introduction to Jim

また設定値はブラウザからも確認可能

その他

デフォルトではメールはメモリ上に保存されるので、
コンテナの再起動などを行うと受信したメールは消えます。


参考記事

Qiita: MailHogでメール送受信のテストをする