增強狀態代碼是結構化線索,而不是完整的事件報告。 「5.7.1」可以將調查範圍縮小到安全性或策略,但它無法單獨識別策略擁有者、受影響的路由或正確的設定變更。在整個故障排除過程中,將完整的診斷資訊保留在代碼旁邊。
閱讀所有三個組成部分
RFC 3463定義了具有類別、主題和詳細資訊組件的增強狀態代碼。該類別區分成功、持續短暫失敗和永久失敗。主題類別區分諸如尋址、郵箱狀態、路由和安全或策略等領域。細節縮小了該主題內的條件。普通的三位數SMTP響應仍然是證據的一部分。 RFC 3463.
不要將最終數字視為全域錯誤標識符。其意義取決於完整的增強程式碼和適用的註冊或提供者文件。接收系統也可以在沒有增強代碼的情況下返回有用的散文。如果基本類別和增強類別看起來不一致,請保留確切的位元組並調查提供者的行為,而不是默默地重寫日誌。
將SMTP回覆與送達報告分開
對話期間會發生SMTP回覆。遞送狀態通知可以稍後報告結果並且可以描述多個收件者。 RFC 3464定義的欄位包括最終收件者、操作、狀態、遠端 MTA 和診斷代碼。獨立讀取每個接收者的區塊;一次失敗並不能證明每個接收者都失敗了。 RFC 3464第 2 節.
行動和狀態回答不同的問題。 Action:失敗表示報告 MTA 已停止對該收件人的嘗試。狀態:4.2.2 重試次數耗盡後仍能描述短暫信箱滿的原因;失敗加上 4.xx 狀態在 DSN 中有效,而非不一致的SMTP回覆。例如,具有這些欄位的過期項目不會僅僅因為容量恢復而自動恢復。在授權任何替換之前檢查實際隊列。看 RFC 3464第 2.3.3 節.
人類可讀的退回主題對於分類很有用,但可以省略決定性欄位。盡可能取得機器可讀的報告或發送日誌。將報告伺服器與遠端伺服器分開,並將報告的時間戳記與失敗的SMTP命令的時間戳區分開來。
讀取假設的收件者區塊
假設發送日誌記錄了missing@example.test的 RCPT TO,後面跟著 550 5.1.1。說明性 DSN 接收者區塊可以包含 Final-Recipient: rfc822; missing@example.test ,操作:失敗,狀態:5.1.1,遠端 MTA:dns; mx.example .test 和診斷代碼:smtp;550 5.1.1 無該使用者。這些是發明的欄位值,而不是執行的交易或完整的MIME報告。
失敗的操作對於該接收者來說是最終的,而診斷則指向尋址。它沒有確定該地址為何不可用或其他收件人發生了什麼。從他們自己的區塊和可信任日誌中獲取這些答案。最終收件人、操作和狀態是每個收件人的必填欄位;遠端 MTA 和診斷代碼是有條件的或可選的。它們的缺席並不意味著允許發明拒絕主機或錯誤文字。
對於不熟悉的註冊詳細信息,請查閱當前的 IANA增強狀態註冊表 和引用的規範,然後是提供者的當前解釋。 RFC 3463提供了框架,而不是每個後續程式碼的詳盡清單。
將程式碼變成可檢驗的假設
對於尋址代碼,請確認預期位址和接收系統行為。對於路由代碼,請檢查失敗的下一跳和路由配置。對於安全性或策略代碼,請標識指定的需求及其擁有者。避免從首選DNS變更開始,然後將每個回應解釋為對其的支援。
記錄一個假設、它預測的證據、以及最小的授權檢驗。更正後的訊息應與相關路線和收件人類別上的原始訊息進行比較。將矛盾的結果保留為有用的證據,而不是將其強加到原始解釋中。升級資料包應包括時間戳記、準確回應、受影響範圍和已測試的更改,並盡量減少訊息內容和個人資料。代碼查找是診斷的開始,而不是診斷的結束。
建立有用的升級包
- 身分:保留訊息和佇列識別碼、失敗信封收件者和受影響的範圍。
- 時間軸:分別記錄提交、失敗嘗試和報告到達。
- 診斷:包括準確的SMTP回覆、命令階段和每個收件者的 DSN 欄位。
- 所有權:區分舉報制度和拒絕制度,並提供證據。
- 下一步:陳述一個可測試的原因、最小的授權檢查和任何矛盾的證據。盡量減少個人資料。