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

スポンサーリンク

メールはまだまだ現役

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

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

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

Test用のSendmailを用意する

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

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

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

If you’re using open source for a large complex environment and need a platform that will enable your messaging roadmap, Sendmail Sentrion may be the right solu...

PythonのDebug Serverを使う

シンプルなアプローチ。

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

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

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

Python の smtpd.DebuggingServer でメール送信をデバッグ – Qiita

The official home of the Python Programming Language

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の動きをする。一回テストサーバのコードを書いてしまえば、他のプログラムのテストの時も多少の手直しで使えるので、一度試して見る価値はある。

テストは必要

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

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

フォローする

この記事へのコメント

Loading Facebook Comments ...

No Trackbacks.