TSUBOCK★LABO-ツボックラボ-

とあるセキュリティエンジニアの技術メモブログ

MENU

気軽にメール送信テストがローカルで行える「Mailhog」で送信テストを試してみた

業務でテストメールを検証環境で送信する必要があり、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で試したので、

MailHog_linux_amd64

MailHog_windows_amd64.exe

をそれぞれ試してみました。

使い方

上記であればファイルをダウンロードして実行するだけです。

例えば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にアクセスできます。

f:id:panda-loves-smile:20211020162117p:plain

先ほどのPythonスクリプトで設定しているFrom-Toや件名などが表示されています。メールが受信できているようなので、上記をクリックしてみます。

f:id:panda-loves-smile:20211020162139p:plain

このように本文も含めてメール送信の確認がMailHogを使ってできました。手軽に立てて確認するにはとても便利。

メールはメモリ上に保持されているだけなので、バイナリを止めれば破棄されます。

Dockerでも立てられる

直接バイナリうごかすのはちょっと・・・という方には

Docker版もあるようです。

$ docker pull mailhog/mailhog

私は試してませんが・・・

参考文献