mailhogでメールを/dev/nullに捨てたい
MailHogは、Go言語で書かれたSMTPサーバーです。
開発環境やステージング環境でメール送信をシミュレートする際に便利です。送信されたメールをキャプチャして、ブラウザベースのユーザーインターフェイスで確認ができます。
しかし検証したい内容によっては、メールをキャプチャする必要がない場合もあります。 この場合メールを/dev/nullに捨てることで、必要以上にメールサーバーのメモリを消費することを防ぐことができます。
AWSなどクラウドインフラを利用している場合、メモリをたくさん積むと料金も嵩みます。アプリケーション側でのメール送信処理のテストを実行したいが、ブラウザ上でのメール本文の確認が不要という場合、SMTPで受信さえしてくれれば要件は満たせるので、メールをキャプチャせずに捨てたいです。
MailHogのREADMEを見ても設定方法が書いていなかったので、オプションで指定できるのか調べました。
CONFIG.mdを見たところ、良さそうなオプションがあったので使ってみました。
-maildir-path
「maildir storage backend」を指定するオプションだそうなので、このオプションでストレージに /dev/null
を指定してあげるとよさそうです。
CMDの上書きを利用して、コンテナで動かしてみました。ベースになるimageは公式のDocker imageを利用しています。
タスク定義はこんな感じです。 command
のところでコマンドの上書きを利用し、オプションを指定しています。
[
{
"name": "${var.env_name}-mailhog-blackhole",
"image": "mailhog/mailhog:v1.0.1",
# ...(省略)
"command": ["-maildir-path", "/dev/null"],
# ...(省略)
}
}
]
この設定でコンテナを起動すると、期待通りメールをキャプチャせずに/dev/nullに捨てることができました。
CONFIG.mdには、このポートを上書きした場合に使えるオプションもありました。
MH_API_BIND_ADDR -api-bind-addr 0.0.0.0:8025 Interface and port for HTTP API server to bind to
MH_UI_BIND_ADDR -ui-bind-addr 0.0.0.0:8025 Interface and port for HTTP UI server to bind to
MH_SMTP_BIND_ADDR -smtp-bind-addr 0.0.0.0:1025 Interface and port for SMTP server to bind to
なお、今回の場合Web UIからのアクセスはないので8025のポートでLISTENしている必要はありません。ただ、公開用のポートとEXPOSEで指定したポートを紐づけない限り外からアクセスはできないので、そのままにしておきました。