登録フローのテストでよくある近道は、認証コードをテスト担当者の個人メールに送り続けることです。数回も繰り返すと、受信トレイに開発・ステージング・本番環境のメールが混在し、新旧のコードを見分けにくくなります。退職したメンバーのアドレスが回帰テストの依存先になることもあります。一時メールなら、問題の一部を解消できます。テストケースごとに新しいアドレスを使い、メールとタスクの終了を合わせることで、テストデータを個人アカウントに持ち込まずに済みます。
ただし「一時的」である以上、アドレスには有効期限があります。パスワードリセット、長期購読、数週間後の定期通知、固定IDが必要な自動回帰テストは、使い捨てアドレスだけに頼るべきではありません。正解はどちらか一方を選ぶことではなく、テスト期間に応じて一時メール、更新可能なアドレス、チーム管理の固定エイリアスを使い分けることです。
このテストケースが一時アドレスに適しているか判断する
適用可否は、3つの質問ですぐに判断できます。テストは現在のセッション内で完了するか。メールは受信だけに使い、返信は必要ないか。失敗した場合、安全にIDを作り直せるか。3つとも「はい」なら、通常は一時メールに適しています。数日後に同じアカウントを再利用する必要がある、メールでチケットに返信する、またはアカウントに代替できないデータが保存されている場合は、管理下のテストドメインか長期転送エイリアスを使いましょう。
| テストタスク | 推奨アドレス | 理由 |
|---|---|---|
| 登録認証コードとウェルカムメール | 一時メール | 有効期間が短く、テストケースごとに再作成できる |
| パスワードリセットの即時フロー | 一時メールまたは更新可能なメール | 同じテスト内で完了できるが、日をまたぐ場合は保持が必要 |
| 7日後に送信される定着通知 | 固定テストエイリアス | 安定したIDと長期的な監視が必要 |
| メール返信でチケットを起票 | 送受信可能なテストアカウント | 一時メールは通常、受信専用 |
| 支払いと実在人物のIDが必要なアカウント | 専用の長期メール | 継続的な復旧と監査が必要 |
一時メールをサービス制限の回避手段として使わないでください。テストは自分に操作権限のあるシステムと環境で行い、第三者サービスのルールを守ってください。外部サービスへの大量登録は信頼できるテストではなく、悪用につながる可能性もあります。
完全なフローでは少なくとも5つの受信シナリオをカバーする
認証コードの有効期限と再送
リクエスト時刻、到着時刻、認証コードの長さ、有効期限を記録します。「再送」を連続してクリックしたら、古いコードが仕様どおり無効になるか、新しいメールに最新のリクエストが明確に示されるかを確認しましょう。「1通届いた」だけでなく、どのメールを使うべきかユーザーが判断できることも確認します。メールが遅延した場合は、認証メールの配信トラブルシューティング待機、更新、再試行の順に切り分けます。
確認リンクのホストと一回限りの動作
テストメール内のリンクが現在の環境を指しているか、パスとパラメーターが正しいか、初回クリック後に再度クリックした際に明確な結果が返るかを確認します。開発環境のメールに本番リンクが誤って含まれるのは、よくある設定ミスです。リンクのログに完全なトークンを出力せず、スクリーンショットやバグ報告でも機密パラメーターを隠してください。
HTML、プレーンテキスト、狭い画面での表示
HTMLテンプレートが正常でも、プレーンテキスト版が読みやすいとは限りません。件名、送信者、プレビューテキスト、ボタン文言、配信停止情報を個別に確認し、狭い画面で長いリンク、認証コードのブロック、表がはみ出さないか確認します。画像が読み込まれなくても重要情報を文字で伝え、ダークモードでも文字と背景が同時に暗くならないようにします。
国際化とタイムゾーン
アカウントの言語を切り替えてメールを再送し、件名と本文が同じ言語テンプレートから生成されること、日付がユーザーのタイムゾーンで表示されること、変数がプレースホルダーに戻っていないことを確認します。特に中国語の氏名、アクセント付き文字、日本語のかなが、送信者名と本文で正しくエンコードされるかを確認しましょう。テストデータには実際の文字境界を含め、常にASCIIだけを使わないでください。
レート制限とエラーメッセージ
短時間にコードを何度も送信するとき、フロントエンドのカウントダウン、バックエンドのレート制限、メール数が一致していなければなりません。何回目から制限されたか、いつ解除されたか、ページに理解しやすい案内が出るかを記録します。自動化スクリプトが間隔を空けずに再試行すると、正常なレート制限を配信障害と誤判定し、価値のないメールを大量に発生させます。
「メールを確認できた」を再現可能なテストケースにする
再現可能なテストケースには、入力、トリガー操作、期待するメール、クリーンアップ操作をすべて保存します。アドレスを作成したらすぐにケース番号を記録し、チャット欄にアドレスを貼るだけにしないでください。件名のアサーションは安定した一部分に絞り、認証コードやユーザー名などの動的値は業務レスポンスまたはテストフィクスチャから読み取り、メール本文と比較します。
- 現在のテストケース用に専用アドレスを作成し、作成時刻を記録する。
- 対象環境で登録または通知操作を実行し、リクエストの関連IDを保存する。
- 妥当な時間内で受信トレイをポーリングし、まず送信者ドメイン、次に件名で絞り込む。
- 詳細を開き、HTMLとプレーンテキスト内の動的変数を確認する。
- リンクまたは認証コードを操作し、成功、再実行、期限切れの状態を検証する。
- メールを削除するかアドレスを期限切れにし、テストアカウントとログ内の機密値を削除する。
妥当な時間枠は、システムのサービスレベルに基づいて設定し、「2秒待つ」と適当に決めるものではありません。メールはキュー、迷惑メール対策、受信側の処理を通過するため、エンドツーエンドテストでは短い遅延を許容しつつ、明確な上限を設定する必要があります。製品が1分以内の到着を保証するなら、5〜8秒ごとに確認し、上限を超えたら失敗にします。100ミリ秒ごとのポーリングは負荷を増やすだけです。
自動化でポーリング、並列処理、誤検出を扱う
並列テストで最も起きやすいのはメールの混線です。複数のタスクで1つのメールボックスを共有し、「認証コード」という件名だけで探すと、別のテストケースのメールをスクリプトが取得してしまいます。テストごとに独立したアドレスを使い、メールテンプレートを変更できる場合は関連IDを含めるのが解決策です。テンプレートを変更できない場合でも、アドレス、送信者ドメイン、作成時刻、件名の4条件で絞り込み、テスト開始後に到着したメールだけを受け付けてください。
ポーリングコードでは、検証中のメールIDを保持します。リストを更新した後も対象メールが存在するなら、無条件に先頭のメールへ切り替えてはいけません。そうしないと新着メールの到着時に表示位置がずれます。一時的なネットワーク障害が起きても、すぐに新しいアドレスを作成せず、まず現在の受信トレイを再試行します。明確に期限切れ、または存在しない場合にのみ再作成します。この状態管理により、一時的な失敗を減らし、手動再現も実際のユーザー体験に近づけられます。
継続的インテグレーションのログに、完全なメール認証情報、認証コード、確認リンクを出力しないでください。失敗時のスクリーンショットには件名とレイアウトを残しても構いませんが、トークンは隠します。テストレポートに記録するのは、リクエストID、到着までの時間、アサーション結果だけで十分です。チームで長期監査が必要なら、管理下のテストエイリアスと権限システムを使い、一時アドレスの履歴に依存しないでください。
データ削除を完了条件に含める
テストに合格しても作業が終わったとは限りません。テストアカウント、一時アドレス、メッセージキュー、データベースのフィクスチャは環境方針に従って削除してください。そうしないと、次の実行が「メールアドレス登録済み」「レート制限が解除されていない」「古い通知がキューに残っている」といった理由で失敗します。自動削除できるオブジェクトの削除はfinally段階に置き、削除の失敗は個別に報告して元のアサーション結果を上書きしないようにします。
チームではアドレスの命名規則と用途も決めておきましょう。開発者の手動スモークテストには即時利用できる一時メール、共有ステージングアカウントにはプロジェクト別の長期エイリアス、本番監視には組織が管理する専用メールを使い、2段階認証を有効にします。特定メンバーの個人メールをインフラにしないでください。テストケースの継続期間が分からない場合は、有効期間プランナーまず見積もり、その後で一時利用、更新可能、長期利用のいずれかを選びます。
最終的な評価基準は、テストアドレスをいくつ作ったかではなく、メールの不具合を安定して再現できるかです。正しい環境に届くこと、動的コンテンツが正確であること、合意した時間内に到着すること、狭い画面とプレーンテキストで読めること、失敗後にデータを削除できることを確認します。このフローにおける一時メールは、テスト戦略そのものではなく、分離のためのツールです。
次のテストケースに向けてクリーンな受信トレイを用意する
即時検証には一時アドレス、日をまたぐ回帰テストや共有IDには長期転送エイリアスを使います。