Nicht zugestellte E-Mail-Header analysieren (zurückgewiesene E-Mails)

Nicht zugestellte E-Mail-Header analysieren (zurückgewiesene E-Mails)

Wie kann ich die Header zurückgewiesener (nicht zustellbarer) E-Mails, die an meinen Server zurückgesendet werden, am besten analysieren und feststellen, ob es sich um einen Soft- oder Hard-Bounce handelt?

Ich sende meinen Benutzern nur Opt-in-E-Mails, aber gelegentlich veralten einige E-Mail-Adressen. Wenn eine E-Mail an meinen Server zurückgeschickt wird, möchte ich herausfinden, warum sie zurückgeschickt wurde (weich/hart). Dann kann ich in meiner Datenbank entsprechend damit umgehen und/oder den Benutzer darauf hinweisen, seine E-Mail-Adresse bei der nächsten Anmeldung zu aktualisieren.

Ich verwende Ubuntu und Postfix. Ich habe VERP erfolgreich mit Aliasnamen und virtuellen Aliasnamen implementiert. Zurückgewiesene E-Mails haben also einen Rückweg von[email geschützt], und ich kann sie an ein Skript weiterleiten.

Nachdem ich VERP nun eingerichtet habe, weiß ich, an wen die ursprüngliche E-Mail gesendet wurde, aber ich muss die zurückgegebenen E-Mail-Header analysieren, um herauszufinden, ob es sich um einen Soft- oder Hard-Bounce handelt.

Wie gehe ich am besten damit um? So wie ich das verstehe, gelten nicht auf allen Mailservern die gleichen Regeln und Header können verschiedene Formate haben. Gibt es ein Open-Source-Projekt, das solche Dinge im Auge behält? Etwas Einfaches, das ich implementieren kann, um die Mehrheit der Bounces richtig zu kategorisieren?

Ich versuche, den Ruf meines Mailservers zu schützen, daher ist jede Hilfe sehr willkommen!

Antwort1

AlsRFC3463erklärt, werden Statuscodes, die mit 5 beginnen, für permanente Fehler und 4 für anhaltende, vorübergehende Fehler verwendet. Anstatt zu versuchen, mehrere Nachrichten mit unterschiedlichen Formaten zu analysieren, können Sie sich auf Serverprotokolle verlassen und etwas wie das Folgende versuchen:

grep " dsn=5." /var/log/mail.log | grep -o -P " to=<(.+?)>" | sort | uniq -c

Dadurch werden permanente Fehler aus mail.log (Postfix-Format) gefunden und die Adressen und die Anzahl der Bounces für jede Adresse angegeben. Sie können auch " dsn=4." verwenden, um Adressen mit temporären Fehlern zu erhalten.

Antwort2

Im Allgemeinen gibt es zwei Arten von Bounces

  1. Die Rückschläge durchDirekteAblehnung des Remote-Mailservers, wenn Ihr Postfix die E-Mail zustellt.
  2. Die durch den Remote-Server (Next-Hop-Server nach Ihrem Postfix) verursachten Bounces können die Nachricht nicht an die endgültigen Empfänger übermitteln.

Der erste Fall wurde bereits abgedeckt durchausgezeichnete Antwortvon Esa Jokinen oben. Am besten analysieren Sie das Maillog.

Der zweite Fall war ein Sonderfall von Bounces. Das Beispielszenario:

  • Sie senden eine E-Mail mit Empfänger[email geschützt]Zumail.beispiel.comServer.
  • In mail.example.com,[email geschützt]wurde als Alias ​​verwendet für[email geschützt]und muss weitergeleitet werden anmail.beispiel.net.
  • Irgendwann malmail.beispiel.netlehnen Sie Ihre Nachricht somail.beispiel.commüssen Bounces an Ihren Server senden.
  • Leider hat das Maillog auf Ihrem Server "dsn=2", weilmail.beispiel.comhabe die Nachricht bereits angenommen, konnte sie aber nicht weiterleiten anmail.beispiel.net.

Hier das Beispiel der zweiten Art von zurückgewiesenen E-Mails. Es gibt eine Weiterleitungsregel für den Yahoo-Mail-Server[email geschützt]->[email geschützt]. Leider lehnt der Mailserver von example.net die Nachricht ab :(

From MAILER-DAEMON  Thu Mar  5 05:07:26 2015
Return-Path: <>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from nm21-vm7.bullet.mail.gq1.yahoo.com (nm21-vm7.bullet.mail.gq1.yahoo.com [98.136.217.54])
        (using TLSv1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits))
        (No client certificate requested)
        by mx.example.org (Postfix) with ESMTPS id D6365565FC
        for <[email protected]>; Thu,  5 Mar 2015 05:07:25 +0700 (WIT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=bounce; t=1425506842; bh=zk/tWZNl6c36dmlPDmakM9ekK8cHVJANXMmSdsbkcWc=; h=From:To:Date:Subject:From:Subject; b=Im95h1qTg6qN3yUI7vF1fXtJ0SbUnzv8rUPwLbpNwxGPN2p8wfosXJzQgJ3nzr4L4ZQ50P2d9E9U4jEUNtnyi7nlFd5kKbtiVuda4H56h1PFnt+7wSpgHcd5Irs/lLODumb6ZZSEpCOWttcB9+JLaDfEUUPjGcbR+xww4XeH5Eo=
From: [email protected]
To: [email protected]
Date: Wed, 04 Mar 2015 22:07:22 -0000
Subject: Failure Notice
X-Yahoo-Newman-Property: bmbounce

Sorry, we were unable to deliver your message to the following address.

<[email protected]>:
Remote host said:
550 5.1.1 User unknown
 [RCPT_TO]

In diesem Fall besteht Ihre einzige Methode darin, die Bounce-Nachricht zu analysieren. Leider gibt es kein Standardformat für Bounces, daher müssen Sie den Text analysieren und die Ursache der Ablehnung ermitteln.

Die Funktionscheckliste Ihres Postfix-Bounce-Parsings:

  1. Überprüfen Sie, ob die VERP-Adresse gültig war. Sie möchten keine ungültigen Nachrichten analysieren.
  2. Analysieren Sie den Text und bestimmen Sie, ob es sich um eine sanfte oder harte Ablehnung handelt.

Für die zweite Funktion können Sie einige häufige Ablehnungsnachrichten googeln. Das Beispiel ist diesesBounce-Regex-Liste.xmlvonJakub Liska.


Esa Jokinen machteein guter Punkt im Kommentar untenüber diese beiden Bounce-Typen. Wenn Ihr Ziel darin besteht, den Ruf des Servers zu wahren, sollte es ausreichen, den ersten Bounce-Typ zu behandeln. Beim zweiten Bounce ging es darum, Ihre Listen zu bereinigen. Daher sollten tote E-Mails gelöscht werden, um somancheRessourcen auf Ihrem Server.

Einige Mailinglisten-Manager wie PHPlist und Mailman bewältigen dieses Bounce-Problem ebenfalls durch die Analyse des E-Mail-Texts, da sie nicht über die Ressourcen zum Parsen des Mailprotokolls verfügen.

verwandte Informationen