Ho un bot che risponde agli utenti. Ma a volte quando il mio bot invia la sua risposta, l'utente o il suo provider di posta elettronica risponderà automaticamente (messaggio vacanza, messaggio di mancato recapito, errore da mailer-daemon, ecc.). Questo è quindi un nuovo messaggio da parte dell'utente (così pensa il mio bot) a cui risponde a sua volta. Loop di mail!Come rendere un bot di posta elettronica che risponde agli utenti che non rispondono alle risposte automatiche e si inseriscono nei loop di posta
Vorrei che il mio bot rispondesse solo alle e-mail reali di veri umani. Attualmente sto filtrando le e-mail che ammettono di avere la precedenza di massa o da una mailing list o l'intestazione Auto-Submitted è uguale a "auto-reply" o "auto-generated" (vedi il codice sotto). Ma immagino ci sia un modo più completo o standard per affrontare questo. (Sono felice di vedere soluzioni in altre lingue oltre a Perl.)
NB: Ricordarsi di fare in modo che il proprio bot dichiari che è autorispondente! Includi
Auto-Submitted: auto-reply
nell'intestazione dell'e-mail del tuo bot.
Il mio codice originale per evitare i loop di posta segue. Rispondi solo se realmail restituisce 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
);
}
(Il check soggetto è sicuramente inutile, ho solo aggiunto questi controlli una alla volta come i problemi sorti e il sopra ora sembra funzionare in modo da non voglio toccare a meno che non ci sia qualcosa di definitivo meglio.)
Personalmente preferisco i bot che sono limitati dal tempo (ad esempio, inviare un'email a una persona al massimo una email in un'ora). Non mi piace ricevere tonnellate di notifiche di ferie quando invio molte e-mail contemporaneamente. – notnoop
Ottimo punto, notnoop. Qualunque cosa tu faccia, una rete di sicurezza a limite di velocità come quella è intelligente. – dreeves