如何檢測自動生成的電子郵件
當(dāng)你用電子郵件系統(tǒng)發(fā)送自動回復(fù)時,你需要注意不要向自動生成的電子郵件發(fā)送回復(fù)。最好的情況下,你將獲得無用的投遞失敗消息。更可能的是,你會得到一個無限的電子郵件循環(huán)和一個混亂的世界。
事實證明,可靠地檢測自動生成的電子郵件并不總是那么容易。以下是基于為此編寫的檢測器并使用它掃描大約 100,000 封電子郵件(大量的個人存檔和公司存檔)的觀察結(jié)果。
Auto-submitted 信頭
由 RFC 3834 定義。
這是表示你的郵件是自動回復(fù)的“官方”標(biāo)準(zhǔn)。如果存在 Auto-Submitted 信頭,并且其值不是 no,你應(yīng)該不發(fā)送回復(fù)。
X-Auto-Response-Suppress 信頭
由微軟定義。
此信頭由微軟 Exchange、Outlook 和其他一些產(chǎn)品使用。許多新聞訂閱等都設(shè)定了這個。如果 X-Auto-Response-Suppress 包含 DR(“抑制投遞報告”)、AutoReply(“禁止 OOF 通知以外的自動回復(fù)消息”)或 All,你應(yīng)該不發(fā)送回復(fù)。
List-Id 和 List-Unsubscribe 信頭
由 RFC 2919 定義。
你通常不希望給郵件列表或新聞訂閱發(fā)送自動回復(fù)。幾乎所有的郵件列表和大多數(shù)新聞訂閱都至少設(shè)置了其中一個信頭。如果存在這些信頭中的任何一個,你應(yīng)該不發(fā)送回復(fù)。這個信頭的值不重要。
Feedback-ID 信頭
由谷歌定義。
Gmail 使用此信頭識別郵件是否是新聞訂閱,并使用它為這些新聞訂閱的所有者生成統(tǒng)計信息或報告。如果此信頭存在,你應(yīng)該不發(fā)送回復(fù)。這個信頭的值不重要。
非標(biāo)準(zhǔn)方式
上述方法定義明確(即使有些是非標(biāo)準(zhǔn)的)。不幸的是,有些電子郵件系統(tǒng)不使用它們中的任何一個 :-( 這里有一些額外的措施。
Precedence 信頭
在 RFC 2076 中沒有真正定義,不鼓勵使用它(但通常會遇到此信頭)。
請注意,不建議檢查是否存在此信頭,因為某些郵件使用 normal 和其他一些(少見的)值(盡管這不常見)。
我的建議是如果其值不區(qū)分大小寫地匹配 bulk、auto_reply 或 list,則不發(fā)送回復(fù)。
其他不常見的信頭
這是我遇到的另外的一些(不常見的)信頭。如果設(shè)置了其中一個,我建議不發(fā)送自動回復(fù)。大多數(shù)郵件也設(shè)置了上述信頭之一,但有些沒有(這并不常見)。
- X-MSFBL:無法真正找到定義(Microsoft 信頭?),但我只有自動生成的郵件帶有此信頭。
- X-Loop:在任何地方都沒有真正定義過,有點(diǎn)罕見,但有時有。它通常設(shè)置為不應(yīng)該收到電子郵件的地址,但也會遇到 X-Loop: yes。
- X-Autoreply:相當(dāng)罕見,并且似乎總是具有 yes 的值。
Email 地址
檢查 From 或 Reply-To 信頭是否包含 noreply、no-reply 或 no_reply(正則表達(dá)式:^no.?reply@)。
只有 HTML 部分
如果電子郵件只有 HTML 部分,而沒有文本部分,則表明這是一個自動生成的郵件或新聞訂閱。幾乎所有郵件客戶端都設(shè)置了文本部分。
投遞失敗消息
許多傳遞失敗消息并不能真正表明它們是失敗的。一些檢查方法:
- From 包含 mailer-daemon 或 Mail Delivery Subsystem
特定的郵件庫特征
許多郵件類庫留下了某種痕跡,大多數(shù)常規(guī)郵件客戶端使用自己的數(shù)據(jù)覆蓋它。檢查這個似乎工作得相當(dāng)可靠。
- X-Mailer: Microsoft CDO for Windows 2000:由某些微軟軟件設(shè)置;我只能在自動生成的郵件中找到它。是的,在 2015 年它仍然在使用。
- Message-ID 信頭包含 .JavaMail.:我發(fā)現(xiàn)了一些(5 個 50k 大小的)常規(guī)消息,但不是很多;絕大多數(shù)(數(shù)千封)郵件是新聞訂閱、訂單確認(rèn)等。
- ^X-Mailer 以 PHP 開頭。這應(yīng)該會同時看到 X-Mailer: PHP/5.5.0 和 X-Mailer: PHPmailer XXX XXX。與 “JavaMail” 相同。
- 出現(xiàn)了 X-Library;似乎只有 Indy 設(shè)定了這個。
- X-Mailer 以 wdcollect 開頭。由一些 Plesk 郵件設(shè)置。
- X-Mailer 以 MIME-tools 開頭。
最后的預(yù)防措施:限制回復(fù)的數(shù)量
即使遵循上述所有建議,你仍可能會遇到一個避開所有這些檢測的電子郵件程序。這可能非常危險,因為電子郵件系統(tǒng)只是“如果有電子郵件那么發(fā)送”,就有可能導(dǎo)致無限的電子郵件循環(huán)。
出于這個原因,我建議你記錄你自動發(fā)送的電子郵件,并將此速率限制為在幾分鐘內(nèi)最多幾封電子郵件。這將打破循環(huán)鏈條。
我們使用每五分鐘一封電子郵件的設(shè)置,但沒這么嚴(yán)格的設(shè)置可能也會運(yùn)作良好。
你需要為自動回復(fù)設(shè)置什么信頭
具體細(xì)節(jié)取決于你發(fā)送的郵件類型。這是我們用于自動回復(fù)郵件的內(nèi)容:
- Auto-Submitted: auto-replied
- X-Auto-Response-Suppress: All
- Precedence: auto_reply