2017-05-04 90 views
1

如何檢測「退回」的電子郵件回覆和其他自動回覆,以解決Python中發送失敗的問題?如何檢測退回電子郵件

我正在實現一個簡單的服務器來轉發郵件和自定義Web應用程序中的註釋之間的消息。由於我的評論模型支持「全部回覆」功能,如果評論帖中的兩封電子郵件無效,可能會有一個無限的電子郵件鏈,我的系統會發送一封電子郵件,收到反彈電子郵件,將此郵件轉發給其他人無效的電子郵件,收到反彈電子郵件,將其轉回第一個無限期。

我想避免這種情況。有沒有一個標準的錯誤代碼用於退回或拒絕的電子郵件,我可以檢查,理想情況下與Python的imaplib包?

回答

1

Wikipedia在這個問題上有一些很好的信息。 RFC6522給出了來自SMTP服務器的任何管理消息的錯誤代碼,如錯誤500
您可以嘗試收聽錯誤消息錯誤500。這應該工作。
引用維基百科,

用於管理消息的報告格式由 RFC 6522.甲DSN定義可以是 三部分組成的MIME多/報告消息:

人類可讀說明;可解析的機器 消息/遞送狀態, 陳述幾個可能的字段的「名稱:類型;值」行的列表;和原始消息或其部分 ,作爲message/rfc822類型的實體。 DSN 的第二部分也很可讀。瞭解哪個MTA扮演了哪個角色是必不可少的。 Reporting-MTA負責撰寫和發送DSN。

當SMTP事務處理期間Remote-MTA拒絕消息時,可以使用類型爲smtp的 字段診斷代碼報告該值。 請注意,除了數字的3位數值之外,SMTP響應 包含一個人類可讀部分。信息

Remote-MTA:dns; smtp.store.example [192.0.2.3] Diagnostic-Code:smtp; 550這裏沒有這樣的用戶有時報道,例如,一邊給 smtp.store.example [192.0.2.3] RCPT TO:< < < 550沒有此用戶

我不知道雖然我是Python初學者,但是關於imaplib。

1

來自地址的SMTP信封不應該與RFC822來自標題地址相同。然後,任何SMTP錯誤將轉到退回地址,但任何真正的電子郵件都將轉到發件人地址。郵件列表管理員使用VERP來檢測問題,方法是使用每個遞送的不同信封發件人地址。

0

避免反應以其Return-Path消息不在From,或包含一個或Auto-SubmittedX-Loop頭域,或具有與類型多部分/報告正文部分。

您可能還想在發送的郵件中指定Auto-Submitted: auto-generated。我希望,如果你這樣做,馬克斯說,會照顧到這個問題,但自動提交併不昂貴。