業務でテストメールを検証環境で送信する必要があり、SendmailやPostfixをDockerで立ち上げて使おうと思ってたところ、手軽にローカルに試験用メールサーバが立てられる「MailHog」というGo言語で作られたものがあったので、試しに利用してみました。
確認環境
- Ubuntu 20.04 (WSL2)
- Windows10
事前準備
GitHubのMailHogのReleasesから動かす環境に応じたバイナリファイルを取得します。
https://github.com/mailhog/MailHog/releases/tag/v1.0.1
今回はUbuntu20.04とWindows10で試したので、
と
をそれぞれ試してみました。
使い方
上記であればファイルをダウンロードして実行するだけです。
例えばUbuntu20.04の場合は
$ ./MailHog_linux_amd64
で実行が可能です。
デフォルトでの待ち受けポートはPort1025ですが
https://github.com/mailhog/MailHog/blob/master/docs/CONFIG.md に記載されているとおりに、起動時にオプションを設定してあげると任意のPortで立ち上げることができます。
$ ./MailHog_linux_amd64 -smtp-bind-addr 0.0.0.0:10587
試しにメールを送信してみる
では、MailHogを立ち上げてメールを送信してみましょう。
$ ./MailHog_linux_amd64
実行が完了すると下記のように標準出力が行われます。
2021/10/20 15:56:00 Using in-memory storage 2021/10/20 15:56:00 [SMTP] Binding to address: 0.0.0.0:1025 [HTTP] Binding to address: 0.0.0.0:8025 2021/10/20 15:56:00 Serving under http://0.0.0.0:8025/ Creating API v1 with WebPath: Creating API v2 with WebPath:
これで準備完了です。MailHog宛にメールを送信してみましょう。
Pythonで簡単なメール送信Scriptを書いてみました。これで試してみます。
- app.py
import smtplib import os from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText stmp_server = "127.0.0.1" stmp_port = "1025" to_address = "dest_mail@tsubolog" from_address = "src_mail@tsubolog" subject = "Test Email" body = "いえーい、みてるー?" msg = MIMEMultipart() msg["Subject"] = subject msg["From"] = from_address msg["To"] = to_address msg.attach(MIMEText(body, "plain")) smtp = smtplib.SMTP(stmp_server, stmp_port) smtp.send_message(msg) smtp.close()
てきとーに書いただけなので、上記のツッコミはともかくw 実行してみます。
$ python app.py
すると、MailHog側では接続の状況が出力されます。
2021/10/20 15:56:25 [SMTP 127.0.0.1:58698] Starting session 2021/10/20 15:56:25 [SMTP 127.0.0.1:58698] [PROTO: INVALID] Started session, switching to ESTABLISH state 2021/10/20 15:56:25 [SMTP 127.0.0.1:58698] Sent 35 bytes: '220 mailhog.example ESMTP MailHog\r\n' 2021/10/20 15:56:25 [SMTP 127.0.0.1:58698] Received 29 bytes: 'ehlo 20019650-0.localdomain\r\n' 2021/10/20 15:56:25 [SMTP 127.0.0.1:58698] [PROTO: ESTABLISH] Processing line: ehlo 20019650-0.localdomain 2021/10/20 15:56:25 [SMTP 127.0.0.1:58698] [PROTO: ESTABLISH] In state 1, got command 'EHLO', args '20019650-0.localdomain' 2021/10/20 15:56:25 [SMTP 127.0.0.1:58698] [PROTO: ESTABLISH] In ESTABLISH state ....
CUIで内容を確認するのはつらいので、Web画面から確認したいと思います。MailHogはローカルにWebアプリを立ち上げてくれます。デフォルトは8025番Portです。早速アクセスしてみましょう。
http://127.0.0.1:8025にアクセスするとMailHogのWebUIにアクセスできます。
先ほどのPythonスクリプトで設定しているFrom-Toや件名などが表示されています。メールが受信できているようなので、上記をクリックしてみます。
このように本文も含めてメール送信の確認がMailHogを使ってできました。手軽に立てて確認するにはとても便利。
メールはメモリ上に保持されているだけなので、バイナリを止めれば破棄されます。
Dockerでも立てられる
直接バイナリうごかすのはちょっと・・・という方には
Docker版もあるようです。
$ docker pull mailhog/mailhog
私は試してませんが・・・