2017-05-04 3 views
1

Wie erkennen Sie "geblockte" E-Mail-Antworten und andere automatisierte Antworten auf fehlgeschlagene Zustellversuche in Python?So erkennen Sie Bounce-E-Mails

Ich implementiere einen einfachen Server, um Nachrichten zwischen E-Mails und Kommentaren in einer benutzerdefinierten Webanwendung weiterzuleiten. Da mein Kommentarmodell eine Funktion "Allen antworten" unterstützt, wenn zwei E-Mails in einem Kommentarthread ungültig werden, gibt es möglicherweise eine unendliche E-Mail-Kette, in der mein System eine E-Mail sendet, eine Bounceback-E-Mail erhält und diese an die andere weiterleitet Ungültige E-Mail, eine Bounceback-E-Mail erhalten, diese an die erste weiterleiten, ad infinitum.

Ich möchte dies vermeiden. Gibt es einen standardmäßigen Fehlercode, der für unzustellbare oder abgelehnte E-Mails verwendet wird, für die ich nachsehen könnte, idealerweise mit Pythons imaplib-Paket?

Antwort

1

Wikipedia hat einige gute Informationen zu diesem Thema. RFC6522 gibt den Fehlercode für jede administrative Nachricht von einem SMTP-Server als Error 500.
Sie können versuchen, eine Fehlermeldung mit Error 500 abhören. Das sollte funktionieren.
Zitiert Wikipedia,

Das Format für die Meldung von administrativen Nachrichten von RFC definiert ist 6522. Ein DSN kann eine MIME-Multipart/report Nachricht von drei Teilen zusammengesetzt sein:

ein für Menschen lesbare Erläuterung; eine Maschine parsable Nachricht/Lieferstatus, eine Liste von "Name: Typ; Wert" Zeilen, die mehrere mögliche Felder angeben; und die ursprüngliche Nachricht oder einen Teil davon als eine Einheit vom Typ Nachricht/rfc822. Der zweite Teil eines DSN ist auch gut lesbar. Es ist wichtig zu verstehen, welche MTA welche Rolle gespielt hat. Der Reporting-MTA ist verantwortlich für das Erstellen und Senden von der DSN.

Wenn ein Remote-MTA eine Nachricht während einer SMTP-Transaktion ablehnt, kann ein Feld Diagnose-Code des Typs smtp verwendet werden, um diesen Wert zu melden. Beachten Sie, dass neben dem numerischen 3-stelligen Wert die SMTP-Antwort einen von Menschen lesbaren Teil enthält. Die Information

Remote-MTA: DNS; smtp.store.example [192.0.2.3] Diagnose-Code: smtp; 550 kein solcher Benutzer wird hier manchmal wie berichtet, zum Beispiel, während auf smtp.store.example sprechen [192.0.2.3] RCPT TO: < < < 550 No such user hier

Ich bin nicht sicher über Imaplib obwohl ich ein Anfänger mit Python bin.

1

Ihre SMTP-Envelope von der Adresse sollte nicht mit Ihrer RFC822 From Header-Adresse identisch sein. Dann werden alle SMTP-Fehler an die Bounce-Adresse weitergeleitet, aber alle echten E-Mails werden an die Von-Adresse gesendet. Mailing List Managers verwenden VERP, um Probleme zu erkennen, indem Sie für jede Zustellung einen anderen Umschlag Von Adresse verwenden.

0

Vermeiden Sie zu Nachrichten, deren Return-Path Umsetzung ist nicht in From, oder dass ein Auto-Submitted oder X-Loop Header-Feld enthalten, oder dass ein Körperteil mit Typ multipart/Bericht.

Sie können auch Auto-Submitted: auto-generated auf Ihrer ausgehenden Mail angeben. Ich erwarte, dass, wenn Sie tun, wie Max sagt, dass wird sich um das Problem kümmern, aber Auto-Submited ist nicht teuer.