ユーザーに返信するボットがあります。しかし、ボットが返信を送信すると、ユーザーまたはメール プロバイダーが自動応答することがあります (休暇メッセージ、バウンス メッセージ、メーラー デーモンからのエラーなど)。それはユーザーからの新しいメッセージであり (私のボットはそう考えています)、それに対して返信します。メールループ!
ボットが実際の人間からの実際のメールにのみ返信するようにしたいと考えています。私は現在、一括優先またはメーリング リストからの電子メール、または「自動返信」または「自動生成」に等しい自動送信ヘッダーを持つ電子メールを除外しています (以下のコードを参照)。しかし、これに対処するためのより包括的または標準的な方法があると思います。(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
);
}
(Subject チェックは確かに不要です。問題が発生したときにこれらのチェックを 1 つずつ追加しただけで、上記は機能するようになったので、決定的に優れたものがない限り、触れたくありません。)