テスト用の一時メール:開発者とQAチームが登録フローを確認する方法
手動テストの手順、12項目のチェックリスト、QAで公開受信トレイを使う際の実際の制限、そして自動化や機密情報が必要なテストで使うべきツールを紹介します。
PureTempMailチーム
PureTempMailを開発・運営するエンジニアたち
結論
一時メールアドレスは、登録フローを手作業で確認する手軽な方法です。確認メール、パスワード再設定メール、ウェルカムメールが、誰の個人メールボックスにも触れずに、公開インターネット上の本物の受信トレイに数秒で届きます。自動テスト、本物の顧客データ、機密情報を含むものには、代わりにローカルのメールキャッチャーかテスト用サンドボックスを使ってください。
メールを送るプロダクトでは、誰かが新しいアドレスで何度も何度も登録しなければなりません。開発者は自分のGmailにプラス記号を付けて使い、QAテスターは捨てアカウントをスプレッドシートで管理し、プロダクトマネージャーは同僚の受信トレイを借ります。新規ユーザーが本番やステージングのメール環境から実際に何を受け取るかを確認する、という1つの作業に関しては、テスト用の一時メールアドレスがどれよりも速い方法です。
私たちはPureTempMailのメールサーバーを運用しているので、以下の制限は推測ではなく実際の設定値です。このガイドでは、テスト計画の中で公開受信トレイがどこに位置づけられるか、5分でできる手動テストの手順、私たち自身の登録メールに使うチェックリスト、そして別のツールを使うべきケースを取り上げます。
テスト手段の中での一時受信トレイの位置づけ
テストアカウントにアドレスを用意する一般的な方法は5つあります。多くのチームは、同じリリースの異なる段階で、そのうち2つか3つを使い分けることになります。
| 手段 | 向いている用途 | インターネット経由の実配信 | 自動化 | 注意点 |
|---|---|---|---|---|
| 公開の一時受信トレイ(PureTempMailなど) | ステージングや本番のメールの手動確認、探索的テスト、デモ | あり | 当サービス側にはなし。ブラウザで受信トレイを見て確認します | アドレスを知った人は誰でもメールを読めます。延長しなければ1時間で期限切れになります |
| ローカルのSMTPキャッチャー(Mailpitなど) | アプリが偽のSMTPサーバーに送信する開発マシンやCI | なし。メールはマシンやネットワークの外に出ません | あり。HTTP API経由 | DNS、SPF、DKIMや、実際のプロバイダーがメールをどう扱うかについては何もわかりません |
| ホスト型テストサンドボックス(Mailtrap、Mailosaurなど) | ステージング環境とE2Eテストスイート | 製品によります。SMTPで捕捉するもの、ベンダーのテスト用ドメインで受信するものがあります | あり。主要な言語向けのSDKがあります | 本格的な量には有料プランが必要で、テストデータを別のベンダーに預けることになります |
| チームのメールボックスでプラスアドレスを使う | 翌月もログインし直す必要がある長期のテストアカウント | あり | そのメールプロバイダーのAPI経由のみ | 多くの登録フォームはプラス記号を受け付けず、すべてのテストが1つの共有受信トレイに届きます |
| 自前のキャッチオール用テストドメイン | 自分で管理する、長く使えるテストアカウントを大量に用意する場合 | あり | あり。IMAPやAPIでメールボックスを読む場合 | DNSとメールホスティングの設定と維持が必要です |
一時受信トレイは、ほかの手段が埋められない隙間で役に立ちます。本物のメールプロバイダーが送った本物のメッセージが、自分の管理下にないドメインに届き、数秒でブラウザに表示される、という点です。どこかにまた新しいアカウントを作ることなく、新規顧客が目にするものに最も近い状態を確認できます。
PureTempMailを使った手動テストの手順
登録フローを手作業で確認するときにおすすめする手順です。1回あたり5分ほどかかります。
テストユーザーごとに新しいメールボックスを開く
別のブラウザウィンドウでPureTempMailを開きます。読み込むと新しいアドレスが作成されます。メールボックスはブラウザごとに記憶されるので、テストユーザーごとに新規を押すか、2人のテスターが1台のマシンを共有する場合はプライベートウィンドウを使ってください。
テストケースの横にアドレスを記録する
使う前に、アドレスをテストケースやチケットに貼り付けておきます。後でテスターから再設定メールが届かなかった理由を聞かれたとき、どのメールボックスに送ったかを知っておく必要があります。
登録を実行し、送れるメールをすべて送らせる
フォームを送信したら、新規ユーザーが最初のセッションで発生させうるメールをリクエストします。確認メールの再送、パスワードを忘れた場合、マジックリンクでのログイン、メールアドレス変更のリクエストなどです。それぞれが別のテンプレートで、個別に壊れる可能性があります。
再読み込みせずに受信トレイを見守る
新しいメールは、私たちのサーバーが受け付けた瞬間にライブ接続でページにプッシュされます。そのため、メッセージが表示された時刻は実際の配信時刻に近くなります。それぞれにかかった時間を記録してください。配信経路については仕組みで説明しています。
各メッセージを両方の表示で開く
HTMLで読んだ後、テキストに切り替えます。テキスト表示は、一部のメールソフトやスクリーンリーダーが代わりに使う表示で、テキストパートの欠落や読めないコードが最初に見つかる場所です。すべてのリンクをクリックして、どこに移動するかを確認してください。
フローに時間がかかるなら延長する
ステップメール、承認待ち、2日目のリマインドなどには、もっと時間が必要です。+1時間を押すと、タイマーが1時間にリセットされます。メールボックスの作成から24時間までは、これを繰り返せます。
期限切れにしてからバウンスをテストする
期限切れ後、私たちのサーバーはそのアドレス宛てのメールをSMTPの段階で、"No such mailbox"という恒久エラーで拒否します。もう1通そのアドレスに送り、アプリやメールプロバイダーがハードバウンスとして記録し、そのユーザーへの送信を止めることを確認してください。
登録メールのテストチェックリスト
どのプロダクトでも、リリース前に登録メールで確認したい項目です。どれも本物の受信トレイなら見つけやすく、コードレビューでは見落としやすいものです。
- 確認コードまたはリンク。届くこと、コードがテキストで読めること、リンクが1回だけ使えること、2回目のクリックでエラーページではなくわかりやすいメッセージが出ること。
- マジックリンクとワンタイムコード。新しいリンクで古いリンクが無効になること、期限切れのリンクで次に何をすべきかが説明されること、別のブラウザでリンクを開いたときに意図どおりに動くこと。
- パスワード再設定。どのアカウント向けのメールかが書かれていること、リンクに有効期限があること、未登録のアドレスで再設定をリクエストしても、そのアドレスにアカウントがあるかどうかがわからないこと。
- ウェルカムメールとステップメール。最初の1通が確認の前ではなく後に届くこと、確認を済ませていないユーザーには後続のメールが送られないこと。
- HTMLパートとテキストパート。両方が存在し、同じ内容であること、重要な情報が画像の中だけにないこと。私たちのHTML表示では外部画像が読み込まれるので、そこで画像を確認し、テキスト表示で画像なしのメッセージを確認できます。
- 添付ファイル。請求書やPDFが、適切なファイル名とコンテンツタイプで届くこと。テスト用のファイルは1メッセージあたり1 MB未満にするか、ダウンロードリンクを送ってください。そのほうが実際のユーザーにも親切です。
- リンク先。本番のメールにlocalhost、社内ホスト名、ステージングのドメインを指すリンクがないこと、トラッキング用のリダイレクトが正しいページにたどり着くこと。
- 配信停止ヘッダー。マーケティングメールやステップメールに有効な配信停止リンクがあり、大量送信者の場合はRFC 8058で定められたワンクリックの
List-Unsubscribeヘッダーがあること。これはGoogleの送信者ガイドラインで大量送信者に義務づけられています。再設定メールのようなトランザクションメールは、配信停止によって止められるべきではありません。 - 配信時間。確認メールが1、2分以上かかると、ユーザーは離れていきます。遅い場合は、アプリがほかのジョブの後ろにメールを並べていないか、プロバイダーが新しい送信者を制限していないかを確認してください。
- 自社のレート制限。再送ボタンを連打してみてください。アプリは回数を制限してユーザーに待つよう伝えるべきで、コードを10通送ったり、何も言わずに失敗したりしてはいけません。
- アドレスの再利用。1つのセッション内で同じアドレスで2回登録し、2回目を確認します。「登録済み」とわかりやすく案内され、2つ目のアカウントが作られないこと。
- 使い捨てドメインのルール。一時アドレスをブロックしているなら、エラーメッセージがわかりやすいこと、そして誤って本物のプロバイダーまでブロックしていないことを確認してください。詳しくは後述します。
当サービスの制限と、テストへの影響
私たちのサーバーの実際の設定値です。テストはこれを前提に計画してください。
- 有効期間
- 作成から1時間。+1時間で1時間にリセットでき、作成から24時間まで延長できます。1回のセッションには十分ですが、次のスプリントで使い回すテストアカウントには足りません。
- メッセージ
- 1つのメールボックスにつき最大50通、5 MBまで。どちらかの上限に達すると新しいメールは拒否されるので、1つのアドレスに向けた負荷テストはすぐにカウントが止まります。テストユーザーごとに新しいメールボックスを開いてください。
- メッセージサイズ
- 1通あたり添付ファイルを含めて最大1 MB。保存されるのは最初の10個の添付ファイルだけです。
- 受信専用
- このアドレスからは送信も返信もできません。サポートチケットのやり取りのように、ユーザーがメールで返信する必要があるフローは、ここでは最後までテストできません。
- ドメイン
- すべてのアドレスで同じ1つのドメインを使います。既知の一時ドメインをブロックしているプロダクトなら、私たちのドメインもブロックされます。その挙動をテストしたいときには好都合です。
- 新しいメールボックス
- 1つのIPアドレスから1分あたり5個まで。同じオフィス回線を使うQAチームは、この枠を共有することになります。
- 削除
- 期限切れ後、5分ごとに実行されるクリーンアップが、メールボックスとそのメッセージ、添付ファイルを削除します。バグ報告の証拠が必要なら、タイマーが切れる前にスクリーンショットを撮ってください。
- 自動化
- メールボックスにスクリプトからアクセスするための公開APIはありません。PureTempMailはブラウザを見ている人のために作られているので、自動テストスイートには後述のツールが適しています。
テストメールのSPF、DKIM、DMARCを確認する
きれいに表示されるメッセージでも、認証に失敗して実際のユーザーの迷惑メールフォルダに入ってしまうことがあります。確認するには、同じメールをGmailのメッセージのソースを表示のように生のソースを表示できるメールボックスに送り、ヘッダーを私たちのメールヘッダー解析ツールに貼り付けます。SPF、DKIM、DMARCに合格したか、Reply-Toが別のドメインになっていないかがわかり、配信が遅れた場所も表示されます。解析はブラウザ内で行われるので、ヘッダーが私たちに送られることはありません。
自社の使い捨てドメインのブロックをテストする
登録フォームに使い捨てメールのチェックを追加しながら、本物の一時アドレスで一度もテストしていないチームは少なくありません。一時受信トレイは、まさにうってつけのテスト入力です。
- 文言を確認する。拒否メッセージでは、代わりに何を使えばよいかを伝えるべきです。たとえば「個人用または仕事用のアドレスを使用してください」などです。ただの「無効なメールアドレス」では、誠実なユーザーがありもしない入力ミスを探すことになります。
- 誤検知を確認する。地域の小規模なプロバイダーや、企業の独自ドメインのアドレスで試してください。パターンで照合するブロックリストは、ときどきそれらを巻き込みます。
- すべての入口を確認する。登録フォーム、メールアドレス変更の設定、招待、APIに同じルールを適用すべきです。そうしないと、忘れていた経路が使われるだけです。
- そもそもブロックが必要か判断する。Webサイトが使い捨てメールをブロックする理由の記事で、ブロックを正当化するコストと、誠実なユーザーを失うだけになるケースを解説しています。
公開の一時受信トレイが適さない場合
次のような場合は、別の手段を使ってください。
- 本物の機密情報や顧客データを含むもの。本番のトークン、本物の請求書、管理者への招待など。チームだけが読めるサンドボックスを使ってください。
- 自動テストとCI。開発環境とCIではMailpitのようなローカルキャッチャーにアプリを向け、デプロイ済みの環境に対してテストを実行する必要があるときはMailtrapやMailosaurのようなホスト型サンドボックスを使います。以前からあるローカルキャッチャーのMailHogはもうメンテナンスされておらず、Mailpitが一般的な代替です。
- 本物のユーザーデータのコピーがあるステージング環境。そこでの問題はコピーされたデータそのものです。データを消去し、ステージングのメールはキャッチャーに流して、テストが本物の顧客にメールを送らないようにしてください。
- 残しておく必要があるテストアカウント。営業用のデモアカウントやアプリストア審査用のアカウントには、翌月も使えるアドレスが必要です。チームのメールボックスでプラスアドレスを使うか、自社のテストドメインでキャッチオールを使ってください。
- 絶対に配信されてはいけないフィクスチャ。シードデータや単体テストには、
example.comなどの予約済みドメインや、RFC 2606で確保されている.testトップレベルドメインを使ってください。これらへのメールは、仕様上どこにも届きません。
まとめ
人が本物の送信者からの本物のメールを、偽のデータで素早く確認する必要があるとき、つまりリリース前の確認、探索的テスト、デモには、テスト用の一時メールアドレスを使いましょう。自動化にはキャッチャーやサンドボックスを使い、機密情報は公開受信トレイに入れないでください。ほかにどんな場面で捨てアドが役立つかを検討しているなら、ほかの使い道のページを参考にしてください。メッセージが私たちに届いた後どうなるかは、一時メールサービスの内部の仕組みで解説しています。
出典
- GitHubのMailpit。開発者向けのメールテストツールとAPIで、MailHogからの置き換えについての説明もあります。
- Mailtrap Email Sandboxのドキュメント。
- GitHubのMailosaurクライアントライブラリ。
- RFC 8058、Signaling One-Click Functionality for List Email Headers。
- Google、メール送信者のガイドライン。
- RFC 2606、Reserved Top Level DNS Names。
- メールボックスの有効期間、サイズと件数の上限、レート制限、期限切れ後のSMTPでの拒否、クリーンアップのタイミングは、PureTempMail自身のサーバー設定に基づいています。よくある質問にもまとめています。