テスト用のメールサーバを検討する
PR

テスト用のメールサーバを検討する

ソフトウェア
記事内に広告が含まれています。
スポンサーリンク
スポンサーリンク
スポンサーリンク

メールはまだまだ現役

コミュニケーションツールとしてチャットに人気が集まっている今日この頃。それでもメールは認証情報の送信など、重要な役割を担っている。当然、そういった重要な機能はテストが必要だ。

単純にメールが送られたかどうかを見るならまだしも、送信先メールアドレスと本文に入れた顧客名が適切な組み合わせなのか、注文確認メールと発送案内メールを正しく出し分けているのか、社内/パートナー会社/それ以外で文面を切り替えられているのか、テストで確認すべきことは結構ある。Unit Testでそれぞれ、条件判定や文面生成のロジックを確認していたとしても、End to Endのテストでメールを確認することは必要だ。

テストで使うメールサーバを検討してみる。

スポンサーリンク

Test用のSendmailを用意する

素直なアプローチ。catch allの設定を行えば、実際に配信されることもない。しかし

  • 起動時に名前解決を行うため、テスト環境を適切に構築しないと、タイムアウトするまで起動しない。
  • 設定を間違えると、本当に配信されてしまう。

という問題がある。インフラ寄りの知識が必要になるので、人によってはハードルが高い。

Sendmail Open Source - Open Source Email Server | Proofpoint US
Proofpoint send mail Centrino platform helps companies that use open source for complex environments. Find out if our send mail platform is right for you.
スポンサーリンク

PythonのDebug Serverを使う

シンプルなアプローチ。

python -m smtpd -n -c DebuggingServer localhost:1025

でOK。受信したメールは標準出力に流れるので、ファイルに落として後から調べることも可能。

ただし、SMTP AUTHには対応していない。

Python の smtpd.DebuggingServer でメール送信をデバッグ – Qiita
https://www.python.org/

MailCatcher

MailCatcher
  • 簡単
  • 受け取ったメールはWeb UIで確認できる。また、APIで操作することも可能なので、メールの文面などを調べる時は便利。
  • SMTP AUTHに対応しているが、Greeting Messageには出てこない。そのため、Java Mailで繋ぐと、SMTP AUTHの処理が行われない。

メールを調べるには便利。APIでメールを取得することもできるので、文面の検証テストを自動化しやすい。普通はこれで十分だ。

midi-smtp-server

GitHub – 4commerce-technologies-AG/midi-smtp-server: A small and highly customizable ruby SMTP-Server

ライブラリ。なので、プログラムを書く必要がある。

  • SMTP AUTH対応
  • プログラムを書くので、認証エラーやToo many connectionsといったエラーも発生させられる。

SMTPでエラーが生じたときのテストを行うのであれば、これ。普通にテスト用のメールサーバとして使う場合も、サイトにあるコードでOK。

認証エラーを起こす例がサンプルで用意されている。
midi-smtp-server/midi-smtp-server-auth-example.rb at master · 4commerce-technologies-AG/midi-smtp-server · GitHub
これ、
raise Smtpd535Exceptionは raise MidiSmtpServer::Smtpd535Exception じゃないのかなぁ。

SMTP AUTHを有効にすると、JavaMailもちゃんとSMTP AUTHの動きをする。一回テストサーバのコードを書いてしまえば、他のプログラムのテストの時も多少の手直しで使えるので、一度試して見る価値はある。

テストは必要

ついつい自分宛にテストメールを送ってテスト完了にしてしまうことが多いだろうが、複数の送り先に同時に送ったり、送り先の人の立場によって文面を変えたりと、複雑なことをやるシステムは多いはずだ。実際の運用を想定したテストをきちんと行うことが重要であり、そういったことを行えるよう、テスト環境を構築する必要がある。業務-プログラム-インフラ と、幅広く抑える必要があるのだが。

コメント

タイトルとURLをコピーしました