MailHogでメールを/dev/nullに捨てる方法

· 918 words · 2 minute read

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で指定したポートを紐づけない限り外からアクセスはできないので、そのままにしておきました。