我有一个回复用户的机器人。但有时当我的机器人发送回复时,用户或他们的电子邮件提供商会自动回复(假期消息、退回消息、来自 mailer-daemon 的错误等)。然后是来自用户的新消息(所以我的机器人认为)它又会回复。邮件循环!
我希望我的机器人只回复来自真实人类的真实电子邮件。我目前正在过滤掉承认为批量优先或来自邮件列表或自动提交的标头等于“自动回复”或“自动生成”的电子邮件(请参阅下面的代码)。但我想有一种更全面或更标准的方法来处理这个问题。(我很高兴看到 Perl 之外的其他语言的解决方案。)
注意:记得让你自己的机器人声明它是自动回复的!包括
Auto-Submitted: auto-reply
在您的机器人电子邮件的标题中。
下面是我避免邮件循环的原始代码。仅当 realmail 返回 true 时才回复。
sub realmail {
my($email) = @_;
$email =~ /\nSubject\:\s*([^\n]*)\n/s;
my $subject = $1;
$email =~ /\nPrecedence\:\s*([^\n]*)\n/s;
my $precedence = $1;
$email =~ /\nAuto-Submitted\:\s*([^\n]*)\n/s;
my $autosub = $1;
return !($precedence =~ /bulk|list|junk/i ||
$autosub =~ /(auto\-replied|auto\-generated)/i ||
$subject =~ /^undelivered mail returned to sender$/i
);
}
(主题检查肯定是不必要的;我只是在出现问题时一次添加这些检查,而上面的方法现在似乎有效,所以我不想碰它,除非有明确的更好的东西。)