退回电子邮件的正则表达式

时间:2009-10-26 22:52:19

标签: regex email bounce

我正在寻找用于检测退回电子邮件的正则表达式(或其他方法,如果有这样的事情)。到目前为止,我一直在浏览无人值守的邮箱,并添加我发现的正则表达式字符串。我想有人会有一些已经完成的东西,而不是我重新发明轮子。

以下是我到目前为止的一个例子:

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

5 个答案:

答案 0 :(得分:1)

电子邮件服务器变得多种多样,不能100%工作,但如果你查看邮件的标题而不是它的正文,你可能会有更好的运气,因为标题是机器可读的,不像身体

我首先要查找其中包含“错误”的标题。

答案 1 :(得分:1)

对于你的情况可能有点过分,但最准确的解决方案可能是使用垃圾邮件过滤工具:它们都需要能够优雅地处理反弹,并且他们将投入大量精力来减少误报。

我个人建议SpamAssassin。它被打包为带有命令行界面“spamassassin”的perl模块,可以强制执行它以执行您需要的操作。退回邮件规则被调用(不出所料)BOUNCE_MESSAGE。遗憾的是,它不像你可以复制的正则表达式那么简单。

答案 2 :(得分:1)

您最好查看一些退回邮件的完整标头,并识别服务器可能包含的X标头中的常见元素。与主题分析相比,这将使你的假阳性更少。

答案 3 :(得分:1)

为每封收件人电子邮件生成唯一的退货路径:电子邮件地址。在该POP3服务器上拥有一个包罗万象的帐户并匹配它们。基本上这是VERP

答案 4 :(得分: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;
}