メールのテストをする方法
- 2018年10月26日
- by 菊田 洋一
- Category: 技術ネタ 機能・使い方
SendGridサポートエンジニアの菊田(@kikutaro_)です。メール送信処理を実装するとき、皆さんはどのようにテストをしていますか?個人やテスト用のメールアドレス宛てに送ることが多いと思いますが、メールのテストには様々な方法があります。今回のブログでは、メールのテストで役に立つツールやサービスを紹介します。
テスト用のSMTPサーバ
メール送信のテストでよく使われるのがダミーのSMTPサーバです。通常のSMTPサーバは、メールの送信リクエストを宛先サーバに届けますが、ダミーのSMTPサーバは実際のメール送信はせずに、送信リクエストの受付結果を出力するだけです。
GUIベースのツール
次のようなものがあります。
以下はFakeSMTPの画面です。ローカル環境で起動して、メール送信プログラムの接続先SMTPにはサーバ名「localhost」、ポート番号「25」(FakeSMTPの起動時に指定したポート番号)を指定します。
メール送信プログラムからメールを送信すると、上記画面のようにSMTPサーバの受信結果が一覧表示され、メールの内容やSMTPの通信結果が確認できます。メールの内容は、eml形式のファイルとしても保存されます。実際の宛先へメールが送信されることはありません。
最近ではDockerに対応したダミーSMTPサーバも多いため、インストールや環境設定が不要な場合もあります。事前に各種実行方法をご確認ください。
ユニットテスト
GUIベースのツールは簡単で使いやすいのですが、結果を目で確認する必要があるためテストの自動化にはあまり向いていません。自動化する場合は、組み込みSMTPを用いたライブラリを利用すると便利です。
- SubEtha SMTP (Java) 利用例
- email-spec (Ruby)
定番のライブラリが見当たらない場合は、前述のMailCatcherで代替するという方法もあります。MailCatcherにはAPIでメールの内容を取得する機能があるため、例えばPHPでは、PHPUnitと組み合わせたテストが可能です。
Webサービス
メールのテストをサポートするWebサービスをご紹介します。
MailTrap
MailTrapはダミーSMTPサーバを提供してくれるサービスです。送信リクエストの受信結果をダッシュボード上で確認できる他、Web APIでも取得できるのでテストコードに組み込んだ自動テストも可能です。また、SpamAssassinによる迷惑メール評価もチェックできます。
MailSlurp
MailSlurpはWeb APIでメールボックスを作成・破棄できるWebサービスです。メールボックスにはメールアドレスが割り当てられるため、実際にSendGridなどのメール送信サービスを利用したEnd-To-End(E2E)テストが可能です。SMTPではなく、Web APIでのメール送信をテストする場合にも有用です。
迷惑メール判定
メール送信処理に問題がなくても、実際に送信したら迷惑メールと判定されることがあります。せっかくテストをしても宛先に届かなければ意味がありません。そこで、送信の前に以下のような迷惑メール判定のサービスを利用して、送信するメールや環境に問題がないかチェックすることをおすすめします。
Twilio SendGrid
SendGridでメール送信をする場合に使える、便利な機能を紹介します。
- 「Email Testing」機能を使う
- 大量送信用のドメインを利用する
- Address Allow Listにテスト用の宛先やドメインを登録する
- テスト用のサブユーザを作る
「Email Testing」機能を使う
2024年から新しく使えるようになったEmail Testing機能では、なんと実際の宛先にテストメールを送る必要がありません!
SendGridのダッシュボード上で、様々な受信環境におけるメールの表示や、主要ISPからスパム判定されるリスクを確認することができます。
大量送信用ドメインを利用する
メールの大量送信をテストする際、エイリアスを利用して同じ宛先へ送信するケースを見かけます。しかし、この方法は、スロットリングが発生して受信確認に時間がかかったり、宛先を間違えて大量のバウンスが発生したり、様々なリスクが考えられます。
SendGridには大量送信のテスト用に「@sink.sendgrid.net」というドメインがあるので、こちらを利用してください。
Address Allow Listにテスト用の宛先やドメインを登録する
SendGridではサプレッションリストに登録された宛先へメールを送信するとメールが破棄(Drop)されますが、Address Allow Listに登録しておくと破棄されません。テスト用の宛先メールアドレスやドメインをAddress Allow Listに登録しておけば、テストでバウンスが発生しても、サプレッションリストの削除が不要となって手間が省けます。ただし、バウンスが多いとレピュテーションの低下につながるため、十分に注意した上で、ご利用ください。
テスト用のサブユーザを作る
SendGridでテストメールを送信する場合、サブユーザ機能を使って「テスト用のサブユーザ」を作ると次のようなメリットがあります。
- サブユーザごとに独立した環境が構築されるため、テスト用の設定やテストメール送信によるログや統計情報などの混在を防ぐことができます。
- テストメールの送信に失敗して大量のバウンスが発生すると、最悪の場合、アカウントが停止となってメール送信ができなくなります。アカウントの停止はサブユーザ単位で行われるため、あらかじめ「テスト用」と「本番用」でサブユーザを分けておけば、共倒れのリスクを回避できます。
(レピュテーションへの影響を考慮すると、固定IPアドレスも「テスト用」と「本番用」で分けるのが理想的です)
なお、Email TestingとサブユーザはいずれもProプラン以上で使える機能です。
さいごに
以上、メールのテストに関するご紹介でした。
いかがでしたでしょうか。今回ご紹介した様々な方法をうまく活用して、メールのテストを効率よく実施してもらえれば幸いです。