1

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

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

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

5 回答 5

1

电子邮件服务器种类繁多,无法 100% 工作,但如果您查看邮件的标头而不是正文,则可能会更好,因为标头是机器可读的,与正文不同。

我会首先寻找任何带有“错误”的标题。

于 2009-10-26T23:10:25.363 回答
1

对于您的情况来说,这可能是多余的,但最准确的解决方案可能是使用垃圾邮件过滤工具:他们都需要能够优雅地处理退回邮件,并且他们会付出很多努力来减少误报。

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

于 2009-10-26T23:18:42.330 回答
1

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

于 2009-10-26T23:57:19.660 回答
1

为每个收件人电子邮件生成一个唯一的返回路径:电子邮件地址。在该 POP3 服务器上拥有一个通用帐户并匹配它们。基本上这是VERP

于 2011-10-24T10:24:00.753 回答
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;
}
于 2017-07-08T21:10:58.977 回答