Java 向けの疑似 SMTP サーバの Web アプリを作った

疑似 SMTP サーバ

Ruby だと MailCatcher のような疑似(mock / fake / dummy) SMTP サーバがある。 開発中のアプリケーションでうっかり本番用のメールアドレスにメールを送信しないために便利である。 Java の現場では、疑似 SMTP サーバを入れるために Ruby をインストールするのはちょっと面倒である。 ランタイムが不要な言語で作られた疑似 SMTP サーバもいくつかあるが、文字コードの扱いがイマイチで日本語のメールを正しく扱えるものが少ないという問題もある。 そこで Java の現場で簡単に使える 疑似 SMTP サーバが必要だと考えた。

mail-baku

Java で使える疑似 SMTP サーバの Web アプリである mail-baku を開発した。

https://github.com/mallowlabs/mail-baku

ビルドした war は mail-baku/releases からダウンロードできる。

Tomcatwebapps に war ファイルを放り込んで、(Apache httpd を使っている場合には AJP の設定すれば) http://localhost:8080/mail-baku/ で mail-baku にアクセスできる。 この Web アプリケーションは Web アプリであると同時に SMTP サーバとしても動作している。 ポート番号は 1025 番で SMTP を待ち受けている。

f:id:mallowlabs:20190304205405p:plain

この Web アプリケーションが立ち上がった状態で、0.0.0.0 の 1025 番に向けてメールを送信するように開発中のアプリケーションを設定すれば、本番でうっかりメールを外部に送信することを防ぐことができる。

Tomcat を使ってない場合でもソースをクローンして、mvn ninja:run とすれば Web アプリケーションと SMTP サーバが立ち上がる。

制約事項

BCC のメールアドレスは見ることができない。 これは SMTP サーバに利用している subethasmtp の制限なので許して欲しい。

まとめ

Java の現場で使える MailCatcher 風の疑似 SMTP サーバを作った。 Tomcat が立ち上がっていて、Ruby は入っていないという環境でメール機能をテストしたいという場合には使ってみて欲しい。