メールバウンスを理解する
ハードバウンス、ソフトバウンス、DSN形式、拡張ステータスコード — 送信者の評判を傷つけずにプログラムで処理する方法。
バウンスが発生する2つの方法
メール配信は2つの異なるポイントで失敗する可能性があり、各メカニズムは異なります。
同期拒否(SMTP セッション中)
受信サーバーは SMTP 会話中にリアルタイムでメッセージを拒否します。SMTP レスポンスコードとしてすぐにエラーが返されます。
550 5.1.1 The email account that you tried to reach does not exist.
これは最もクリーンなバウンスの種類です。送信サーバーは配信が失敗したことを即座に知り、それに対応できます。
非同期バウンス(受け入れ後の DSN)
受信サーバーはメッセージを受け入れ(DATA で 250 OK)ますが、後で配信できないことが判明します。メールボックスがクォータを超えている、コンテンツフィルタリングで拒否された、または内部リレーが失敗した場合です。サーバーは配信状況通知(DSN)を生成し、エンベロープ送信者(MAIL FROM アドレス)に送り返します。
これが MAIL FROM アドレスが重要な理由です。これはバウンス通知を受け取るアドレスです。トランザクション電子メールの場合、これはしばしば bounces+tag@yourdomain.com のような専用のバウンス処理アドレスです。
ハードバウンス vs. ソフトバウンス
| ハードバウンス | ソフトバウンス | |
|---|---|---|
| SMTP コード | 5xx(永続的) | 4xx(一時的) |
| 意味 | 配信は決して成功しない | 配信は後で成功する可能性がある |
| 例 | ユーザーが不明、ドメインが存在しない、ポリシーで拒否されたアドレス | メールボックスが満杯、サーバーがビジー状態、グレイリスト、レート制限 |
| アクション | すぐにリストから削除 | バックオフで再試行。繰り返し失敗後は抑制 |
この区別は重要です。ハードバウンスアドレスへの送信を続けると、送信者の評判が傷つきます。メールボックスプロバイダーはバウンス率を追跡します。約 2% を超える場合、配信可能性全体が低下します。
拡張ステータスコード
最新の SMTP サーバーは拡張ステータスコード(RFC 3463、RFC 5248 のレジストリ)を使用します。これは基本的な 3 桁コードよりもはるかに詳細です。形式は class.subject.detail です。
- クラス:2 = 成功、4 = 一時的な失敗、5 = 永続的な失敗
- サブジェクト:問題のカテゴリ
- 詳細:具体的な問題
サブジェクトカテゴリ
| サブジェクト | カテゴリ | 説明 |
|---|---|---|
| X.0.X | その他/未定義 | 未分類のステータスの集約 |
| X.1.X | アドレス指定 | メールボックスまたはアドレスの問題 |
| X.2.X | メールボックス | メールボックスの状態(満杯、無効化など) |
| X.3.X | メールシステム | 宛先メールシステムの問題 |
| X.4.X | ネットワーク/ルーティング | ネットワークまたはルーティングの失敗 |
| X.5.X | メール配信プロトコル | SMTP プロトコルの問題 |
| X.6.X | メッセージコンテンツ | コンテンツまたはメディアの問題 |
| X.7.X | セキュリティ/ポリシー | セキュリティまたはポリシー違反 |
最も一般的に見られるステータスコード
| コード | 意味 | アクション |
|---|---|---|
5.1.0 |
その他のアドレスステータス | ハードバウンス — 削除 |
5.1.1 |
不正な宛先メールボックスアドレス | ハードバウンス — メールボックスが存在しません。すぐに削除してください。 |
5.1.2 |
不正な宛先システムアドレス | ハードバウンス — ドメイン自体が無効です |
5.1.3 |
不正な宛先メールボックスアドレス構文 | ハードバウンス — 不正な形式のアドレス |
4.2.1 / 5.2.1
|
メールボックス無効化 | アカウントが一時停止または無効化 |
4.2.2 / 5.2.2
|
メールボックス満杯 | クォータを超過。4xx なら一時的、5xx なら永続的。 |
5.2.3 |
メッセージが大きすぎます | メッセージサイズまたは添付ファイルを削減 |
4.4.1 |
接続がタイムアウト | 後で再試行 |
4.4.2 |
接続が切断 | 後で再試行 |
5.7.1 |
配信が認可されていない | ポリシー拒否 — メッセージまたは送信者がブロック |
5.7.26 |
DMARC 失敗 | 認証レコードを修正(SPF、DKIM、DMARC) |
4.7.1 |
グレイリスティング/レート制限 | 遅延後に再試行 |
DSN 形式:バウンスメッセージの外観
非同期でバウンスが生成されると、RFC 3464 で定義された構造化メッセージとして到着し、RFC 3462 の multipart/report MIME タイプでラップされます。DSN には 3 つの部分があります。
boundary="boundary42"
--boundary42
Content-Type: text/plain
Your message to bob@example.com could not be delivered.
The recipient's mailbox does not exist.
--boundary42
Content-Type: message/delivery-status
Reporting-MTA: dns; mx1.example.com
Arrival-Date: Tue, 11 Mar 2026 14:00:00 +0000
Final-Recipient: rfc822; bob@example.com
Action: failed
Status: 5.1.1
Diagnostic-Code: smtp; 550 5.1.1 User unknown
Last-Attempt-Date: Tue, 11 Mar 2026 14:00:05 +0000
--boundary42
Content-Type: message/rfc822
[Original message headers included here]
--boundary42--
3 つの MIME パート:
- text/plain — 人間が読める説明
- message/delivery-status — ステータスコード、受信者、診断情報を含むマシン可読の構造化データ
- message/rfc822 — 元のメッセージヘッダー(またはフルメッセージ)。どのメッセージがバウンスしたかを識別するため
プログラム処理の主要フィールド:
- Final-Recipient:失敗したアドレス
-
Action:
failed(永続的)、delayed(一時的)、delivered、relayed、またはexpanded -
Status:拡張ステータスコード(例:
5.1.1) - Diagnostic-Code:生の SMTP レスポンス
バウンスをプログラムで処理する
確実な識別のために VERP を使用
VERP(Variable Envelope Return Path)は受信者アドレスを MAIL FROM にエンコードします。バウンスが戻ると、DSN 本文を解析せずに、どの受信者がバウンスしたかを正確に識別できます。
bob@example.com がバウンスすると、DSN は bounces+bob=example.com@yourdomain.com に配信されます。ローカル部分をパースして、元の受信者を抽出します。DSN が不正な形式または非標準の場合でも機能します。
処理ロジック
信頼性の高いバウンスプロセッサーは、このロジックに従います。
-
DSN をパースする —
message/delivery-statusパートを抽出します。Status:フィールドを読みます。 -
バウンスを分類する:
- ステータスが
5.で始まる → ハードバウンス。アドレスを抑制します。 - ステータスが
4.で始まる → ソフトバウンス。カウンタをインクリメント。
- ステータスが
-
抑制ルールを適用:
- 1 つのハードバウンス → すぐに抑制
- ウィンドウ内の N 個のソフトバウンス(例:7 日以内に 3 個)→ ハードとして抑制
- VERP で識別DSN パースが失敗した場合(多くのサーバーは非標準バウンスを送信します)
- すべてを記録 — ステータスコード、診断、タイムスタンプ、および元のメッセージ ID をログに記録。デバッグ用。
偽のハードバウンスに注意
一部のサーバーは一時的な条件(レート制限など)に対して誤って 5xx を返します。5.7.1 と「接続が多すぎます」または「後で試してください」というメッセージが表示される場合、5xx クラスにもかかわらず、ソフトバウンスとして扱います。診断テキストを二次信号として使用します。
バウンス率と評判
メールボックスプロバイダーは、リストの衛生度の信号として、バウンス率を監視します。
- < 2%バウンス率 — 許容範囲
- 2-5% — 警告ゾーン。スロットリングの増加とスパムフォルダへの配置が見られます。
- > 5% — IP およびドメイン評判が積極的に低下しています。一部のプロバイダーはあなたをブロックします。
トランザクションメール(パスワードリセット、レシート)の場合、バウンス率は 1% を大きく下回る必要があります。トランザクションメールのバウンス率が高い場合、アプリケーションがサインアップ時に無効なアドレスを受け入れていることを示唆します。送信前にメールアドレスの検証を追加してください。
何が間違う可能性があるか
バウンスを完全に無視する
最も一般的な間違いです。ハードバウンスするアドレスへの送信を続けると、メールボックスプロバイダーはあなたの送信 IP をスロットル化し、最終的にブロックします。配信可能性は、無効なアドレスだけではなく、すべての受信者に対して低下します。
非標準のバウンス形式
すべての MTA が RFC に準拠した DSN を生成するわけではありません。一部は message/delivery-status パートなしでプレーンテキストバウンスを送信します。その他は、ステータスコードを人間が読める形式でのみ含めます。パーサーはこれらを適切に処理する必要があります。これが VERP がフォールバック識別方法として非常に価値がある理由です。
バックスキャッター
サーバーが偽装された送信者からのメッセージを受け入れ、その後バウンスを生成する場合、そのバウンスは偽造された MAIL FROM アドレスに送信されます。罪のないドメイン所有者は、送信したことのないメールのバウンスメッセージを受け取ります。これをバックスキャッターと呼び、乱用の一形態です。最新のサーバーは、後で受け入れてバウンスするのではなく、SMTP セッション中に(同期的に)拒否する必要があります。
バウンスループ
バウンス処理アドレス自体がバウンスする場合(設定ミスのため)、ループが発生する可能性があります。SMTP はバウンスメッセージ(MAIL FROM:<> を持つ)を決してバウンスしないことを要求することで、無限ループを防止します。配信が失敗した場合は、黙って破棄されます。
抑制リスト管理
アドレスを抑制したら、それを再度有効にするプロセスが必要です。ユーザーはメールボックスを修正します(クォータをクリア、アカウントを再度有効化)。一般的なパターン:クーリングオフ期間(30~90 日)後に確認メールの受け取りに成功して、受信者を再度検証できるようにします。
重要なポイント
- ハードバウンス(5xx)は永続的です — すぐに送信を停止してください。ソフトバウンス(4xx)は一時的です — バックオフで再試行してください。
- 拡張ステータスコード(
X.Y.Z)は具体的な理由を示します。一般的なものを学びましょう。 - DSN には機械パース用の構造化
message/delivery-statusパートがあります。これを使用してください。 - VERP は信頼性の高いバウンス識別のために戻り値パスに受信者をエンコードします。
- バウンス率を 2% 未満に保ちます。トランザクションメールの場合、1% 未満。
- 送信前に、収集時点でメールアドレスを検証してください。