2009-10-26 56 views
1

我正在尋找一個用於檢測反彈電子郵件的正則表達式(或其他方法,如果有這樣的事情)。到目前爲止,我一直在瀏覽我們的無人值守郵箱,並將我找到的字符串添加到正則表達式中。我想有人會有一些已經完成的事情,而不是我重新發明輪子。反彈電子郵件正則表達式

這裏是我到目前爲止的例子:

/reason: 550|permanent fatal errors|Error 550|Action: Failed|Mailbox does not exist|Delivery to the following recipients failed/i 
+2

您的正則表達式還會過濾掉您家人轉發的電子郵件,詢問爲什麼他們的郵件被反彈。 – Jherico

回答

1

電子郵件服務器也多種多樣這個工作100%,但你可能有更好的運氣,如果你正在尋找在郵件的標題,而不是它的身體,因爲標題的意思是機器可讀的,不像身體。

我會先尋找任何包含'錯誤'的頭文件。

+2

如果你曾經是羣發郵件的受害者(受害者,我的意思是一些asshat用你的郵件地址作爲「發件人」地址進行了羣發郵件),那麼你會看到各種可能的反彈電子郵件主題。 – Jherico

1

對您的情況來說這可能是過度的,但最準確的解決方案可能是使用垃圾郵件過濾工具:他們都需要能夠適度地處理反彈,並且他們將付出很大的努力來減少誤報。

我個人建議SpamAssassin。它被打包成一個帶有命令行界面「spamassassin」的perl模塊,可能會被強制執行你所需要的操作。退回消息規則被稱爲(不出所料)BOUNCE_MESSAGE。不幸的是,它不像您可以複製的正則表達式那麼簡單。

1

您可能最好查看一些退回消息的完整標題,並確定服務器可能包含的X標頭中的公共元素。這會讓你比主題行分析少得多的誤報。

1

爲每個收件人電子郵件生成一個唯一的返回路徑:電子郵件地址。在該POP3服務器上擁有一個全面的帳戶並與其匹配。基本上這是VERP

1

這適用於我,涵蓋幾乎所有的硬反彈。這是Perl,但你可以安全地使用這個Regex推出自己的。

my $content = 'EMAIL MESSAGE HEADER AND BODY'; 
if (
$content =~ m/Status: 5\.\d\.\d/i || # Any 5xx error 
$content =~ m/Action: Failed/i || 
$content =~ m/Reason: 5\.\d\.\d/i || # Any 5xx error 
$content =~ m/MAILER-DAEMON/i || 
$content =~ m/Mailbox does not exist/i || 
$content =~ m/No Such User/i || 
$content =~ m/Delivery to the following recipients failed/i || 
$content =~ m/Recipient address rejected/i || 
$content =~ m/Host or domain name not found/i || 
$content =~ m/mailbox unavailable/i 
){ 

# Extract email address from FINAL-RECIPIENT header: 
$content =~ s/^.*?final-recipient:\s?rfc822;?\s?([^\n]+).*?$/$1/is; 
}