メールのテストをする方法

SendGridサポートエンジニアの菊田(@kikutaro_)です。メール送信処理を実装するとき、皆さんはどのようにテストをしていますか?個人やテスト用のメールアドレス宛てに送ることが多いと思いますが、メールのテストには様々な方法があります。今回のブログでは、メールのテストで役に立つツールやサービスを紹介します。

テスト用のSMTPサーバ

メール送信のテストでよく使われるのがダミーのSMTPサーバです。通常のSMTPサーバは、メールの送信リクエストを宛先サーバに届けますが、ダミーのSMTPサーバは実際のメール送信はせずに、送信リクエストの受付結果を出力するだけです。

GUIベースのツール

次のようなものがあります。

以下はFakeSMTPの画面です。ローカル環境で起動して、メール送信プログラムの接続先SMTPにはサーバ名「localhost」、ポート番号「25」(FakeSMTPの起動時に指定したポート番号)を指定します。

FakeSMTP

メール送信プログラムからメールを送信すると、上記画面のようにSMTPサーバの受信結果が一覧表示され、メールの内容やSMTPの通信結果が確認できます。メールの内容は、eml形式のファイルとしても保存されます。実際の宛先へメールが送信されることはありません。

最近ではDockerに対応したダミーSMTPサーバも多いため、インストールや環境設定が不要な場合もあります。事前に各種実行方法をご確認ください。

ユニットテスト

GUIベースのツールは簡単で使いやすいのですが、結果を目で確認する必要があるためテストの自動化にはあまり向いていません。自動化する場合は、組み込みSMTPを用いたライブラリを利用すると便利です。

定番のライブラリが見当たらない場合は、前述のMailCatcherで代替するという方法もあります。MailCatcherにはAPIでメールの内容を取得する機能があるため、例えばPHPでは、PHPUnitと組み合わせたテストが可能です。

Webサービス

メールのテストをサポートするWebサービスをご紹介します。

MailTrap

MailTrap

MailTrapはダミーSMTPサーバを提供してくれるサービスです。送信リクエストの受信結果をダッシュボード上で確認できる他、Web APIでも取得できるのでテストコードに組み込んだ自動テストも可能です。また、SpamAssassinによる迷惑メール評価もチェックできます。

MailSlurp

MailSlurp

MailSlurpはWeb APIでメールボックスを作成・破棄できるWebサービスです。メールボックスにはメールアドレスが割り当てられるため、実際にSendGridなどのメール送信サービスを利用したEnd-To-End(E2E)テストが可能です。SMTPではなく、Web APIでのメール送信をテストする場合にも有用です。

迷惑メール判定

メール送信処理に問題がなくても、実際に送信したら迷惑メールと判定されることがあります。せっかくテストをしても宛先に届かなければ意味がありません。そこで、送信の前に以下のような迷惑メール判定のサービスを利用して、送信するメールや環境に問題がないかチェックすることをおすすめします。

SendGrid

SendGridでメール送信のテストをする際に便利な機能を紹介します。

  • Address Whitelistにテスト用の宛先やドメインを登録する
  • 大量送信用のドメインを利用する
  • テスト用のサブユーザを作る

Address Whitelistにテスト用の宛先やドメインを登録する

SendGridではサプレッションリストに登録された宛先へメールを送信するとメールが破棄(Drop)されますが、Address Whitelistに登録しておくと破棄されません。テスト用の宛先メールアドレスやドメインをAddress Whitelistに登録しておくと、テストでバウンスが発生しても、サプレッションリストの削除が不要となって手間が省けます。ただし、バウンスが多いとレピュテーションの低下につながるため、注意した上で、ご利用ください。

Address Whitelistにテスト用の宛先やドメインを登録

大量送信用ドメインを利用する

メールの大量送信をテストする際、エイリアスを利用して同じ宛先へ送信するケースを見かけます。しかし、この方法は、スロットリングが発生して受信確認に時間がかかったり、宛先を間違えて大量のバウンスが発生したり、様々なリスクが考えられます。

SendGridには大量送信のテスト用に「@sink.sendgrid.net」というドメインがあるので、こちらを利用してください。

テスト用のサブユーザを作る

SendGridでテストメールを送信する場合、サブユーザ機能を使って「テスト用のサブユーザ」を作ると次のようなメリットがあります。

  • サブユーザごとに独立した環境が構築されるため、テスト用の設定やテストメール送信によるログや統計情報などの混在を防ぐことができます。
  • テストメールの送信に失敗して誤って大量のバウンスが発生すると、最悪の場合、アカウントが停止となってメール送信ができなくなります。アカウントの停止はサブユーザ単位で行われるため、あらかじめ「テスト用」と「本番用」でサブユーザを分けておけば、共倒れのリスクを回避できます。
    (レピュテーションへの影響を考慮すると、固定IPアドレスも「テスト用」と「本番用」で分けるのが理想的です)

なお、サブユーザ機能はProプラン以上で使える機能です。

以上、メールのテストに関するご紹介でした。

いかがでしたでしょうか。今回ご紹介した様々なテスト方法をうまく活用して、メールのテストを効率よく実施してもらえれば幸いです。