RFC 5248: SMTP拡張ステータスコードレジストリ
ELI5: [RFC 3463](3463)は、`5.1.1`(ユーザー不明)のような拡張ステータスコードの元々のセットを定義しました。しかし、メールは進化し続けます——DMARC、TLS、新しいセキュリティポリシー——そして、それぞれが新しいステータスコードを必要とします。RFC 5248は、これらすべてのコードが追跡される公式IANAレジストリを作成し、システムが整理され、一貫性を保つように、新しいものを追加するためのルールを定義しています。
存在する理由
拡張ステータスコード(RFC 3463)は、class.subject.detail形式の3部構成を使用して、メッセージが受け入れられた、拒否された、または遅延した理由を正確に説明します。元のRFCは固定されたコードセットを定義していましたが、新しいメール技術は常に新しいコードを必要としていました:
- DMARC障害は
5.7.25と5.7.26が必要でした - Null MX(RFC 7505)は
5.1.10が必要でした - TLS要件は
X.7.Xセキュリティ範囲のコードが必要でした - 認証拡張は
X.7.20からX.7.27が必要でした
正式なレジストリがなければ、新しいコードはアドホックに割り当てられ、衝突のリスクがありました。RFC 5248はIANA「Simple Mail Transfer Protocol (SMTP) Enhanced Status Codes」レジストリを確立し、登録のための明確なルールと、すべての新しいコードが定義された意味を持つという要件があります。
動作方法
レジストリは3つのコンポーネント別にコードを整理します。新しいコードはIETF標準プロセスを通じて追加され、各エントリは以下を文書化します:
レジストリエントリ形式
| フィールド | 説明 |
|---|---|
| コード | X.Y.Z拡張ステータスコード |
| サンプルテキスト | 条件を人間が読める形で説明したもの |
| 関連する基本ステータスコード | この拡張コードが表示される可能性のあるSMTP応答コード |
| 説明 | このコードを使用するタイミングの詳細な説明 |
| 参照 | このコードを定義したRFCまたはドキュメント |
| 提出者 | 登録をリクエストした者 |
| 変更管理者 | このエントリを更新できる者(通常はIESG) |
レジストリ定義コードを使用したSMTP応答
MAIL FROM:<sender@example.com> 250 2.1.0 Originator address accepted RCPT TO:<user@example.org> 550 5.7.26 This message does not pass DMARC evaluation ^^^^^ IANAレジストリに登録済み、RFC 7372により定義 RCPT TO:<nobody@null-mx.example> 556 5.1.10 Recipient address has null MX ^^^^^^ IANAレジストリに登録済み、RFC 7505により定義
主要な技術詳細
列挙されたステータスコード(クラス+サブジェクト)
RFC 5248は、クラスとサブジェクト値を組み合わせた「列挙ステータスコード」を定義しています。クラスは2、4、または5のままであり、サブジェクト値は:
| サブジェクト | カテゴリ | コード例 |
|---|---|---|
X.0.X |
その他/未定義 |
X.0.0~その他の未定義ステータス |
X.1.X |
アドレス指定 |
5.1.1不正なメールボックス、5.1.2不正なドメイン、5.1.10Null MX |
X.2.X |
メールボックス |
4.2.2メールボックスがいっぱい、5.2.1メールボックス無効 |
X.3.X |
メールシステム |
5.3.4メッセージが大きすぎる |
X.4.X |
ネットワーク/ルーティング |
4.4.1ホストからの応答なし、4.4.2不正な接続 |
X.5.X |
メール配信プロトコル |
5.5.1無効なコマンド、5.5.2構文エラー |
X.6.X |
メッセージコンテンツ |
5.6.1サポートされていないメディア |
X.7.X |
セキュリティ/ポリシー |
5.7.1配信拒否、5.7.26DMARC失敗 |
RFC 3463以降に追加されたコード
| コード | 意味 | 定義元 |
|---|---|---|
5.7.20 |
有効なDKIM署名が見つかりません | RFC 7372 |
5.7.21 |
受け入れ可能なDKIM署名が見つかりません | RFC 7372 |
5.7.22 |
有効な著者一致DKIM署名がありません | RFC 7372 |
5.7.23 |
SPF検証失敗 | RFC 7372 |
5.7.24 |
SPF検証エラー | RFC 7372 |
5.7.25 |
逆引きDNS検証失敗 | RFC 7372 |
5.7.26 |
複数の認証チェック失敗(DMARC) | RFC 7372 |
5.7.27 |
送信者アドレスがNull MXを持つ | RFC 7505 |
5.1.10 |
受信者アドレスがNull MXを持つ | RFC 7505 |
登録ポリシー
新しいコードはIANAポリシーに従う「Specification Required」が必要です。つまり、公開された仕様(通常はRFC)がコードのセマンティクスを定義する必要があります。指定専門家レビュアーは、既存のコードとの衝突がないこと、および新しいコードが正しいサブジェクトカテゴリに適合していることを確認します。
一般的な間違い
- 固定されたステータスコードセットをハードコードする。レジストリは拡張可能です。新しいコードは定期的に追加されます。バウンスプロセッサを構築して、未知のコードを優雅に処理し、クラス(2/4/5)とサブジェクトカテゴリにフォールバックするようにしてください。
- 登録されていないカスタム拡張ステータスコードを発明する。一部のメールサーバーはレジストリにない独自の拡張ステータスコードを返します。技術的には私的使用として有効ですが、これは相互運用性を損ないます。可能な限り登録済みのコードを使用してください。
-
新しいコードを処理するときにクラス桁を無視する。
5.7.28(仮想の将来のコード)に遭遇した場合、その具体的な意味を知らないかもしれませんが、それが永続的なセキュリティ/ポリシー失敗であることはわかります。クラスとサブジェクトは常に意味があります。 -
クラス4とクラス5を区別しない。
4.2.2(メールボックスがいっぱい、一時的)と5.2.1(メールボックス無効、永続的)は同じサブジェクトを共有していますが、完全に異なる処理が必要です。常にまずクラスを確認してください。 - すべてのサーバーが拡張コードを使用していると仮定する。ENHANCEDSTATUSCODES SMTP拡張は広く使用されていますが、普遍的ではありません。バウンスパーサーは、基本的な3桁のコードのみを含む応答を処理する必要があります。
配信可能性への影響
-
正確なバウンス分類。レジストリはメッセージが失敗する理由についての標準化された語彙を提供します。
5.7.26はDMARC失敗を意味します~認証を修正してください。5.1.1は無効なアドレスを意味します~リストから削除してください。レジストリを参照せずに、あなたは推測しています。 -
認証失敗診断。RFC 7372によって追加された
5.7.20~5.7.26範囲のコードにより、認証メカニズムのどれが失敗したかを正確に特定できます:DKIM、SPF、逆引きDNS、またはDMARC整合性。 -
将来のバウンス処理に対応。任意のコードからクラスとサブジェクトを解析することで、新しいコードが登録されても、システムは優雅に低下します。見たことのない
5.7.Xコードは依然として永続的なセキュリティ拒否です。 - DSNレポートとの相関。拡張ステータスコードはSMTP応答とDSNレポート(RFC 3464)の両方に表示されます。レジストリは同じコードが両方のコンテキストで同じことを意味することを保証し、一貫したバウンス処理を可能にします。