我正在寻找用于检测退回电子邮件的正则表达式(或其他方法,如果有这样的事情)。到目前为止,我一直在浏览无人值守的邮箱,并添加我发现的正则表达式字符串。我想有人会有一些已经完成的东西,而不是我重新发明轮子。
以下是我到目前为止的一个例子:
/reason: 550|permanent fatal errors|Error 550|Action: Failed|Mailbox does not exist|Delivery to the following recipients failed/i
答案 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;
}