So sammeln Sie Bounces in Postfix

15

Dies hängt mit dieser Frage zusammen:

linux - Wie bekomme ich einen Bounceback-Bericht für meine Newsletter-Anmeldung? - Serverfehler

Angenommen, ich generiere E-Mail-Adressen wie diese, wenn ich Newsletter versende, um Bounces zu identifizieren und sie von meinem Newsletter abzubestellen: [email protected]

Ich nehme an, ich würde das auf dem Rückweg benutzen, oder?

Wie würde ich es dann in Postfix einrichten, um all diese Adressen mit dem Präfix "Bounce-" in einer Mailbox zu sammeln?

Schließlich habe ich gehört, dass Leute einen weichen Abpraller gegen einen harten Abpraller erwähnen. Kann jemand die Unterschiede erklären und wie sie gezählt werden sollten, um zu wissen, wann jemand dauerhaft aus einem E-Mail-Newsletter entfernt werden muss?

Brian Armstrong
quelle
Beachten Sie, dass eine E-Mail-Adresse, die das Wort "Bounce" enthält, auch als "Yuck" (Spam) angesehen werden kann. Wenn Sie jedoch eine eigene Adresse Message-Idin Ihren Header einfügen können , muss diese zurückgesendet werden genug sein, um zu überprüfen, wer wer ist.
Alexis Wilke

Antworten:

17

Die genaue Antwort auf Ihre Frage (Umgang mit der [email protected]Adresse) hängt davon ab, wie Ihr Server für den Empfang von E-Mails konfiguriert ist. Wenn example.comes sich um die virtuelle Domäne handelt, können Sie die Nachrichten am besten in der [email protected]Mailbox sammeln (vorausgesetzt recipient_delimiter = -).

Wenn example.comes sich um die lokal bereitgestellte Domäne für den Server handelt (E-Mail wird an tatsächliche Systemkonten übermittelt), können Sie eine .forwardDatei zum Basisverzeichnis des bounceBenutzers hinzufügen , die an ein Programm übermittelt wird, das die Bounce-Informationen analysiert und in einer Datenbank oder Datei aufzeichnet . Siehe man localfür weitere Informationen über das .forwardFormat und wie ein Programm zu liefern.

Was wir tun, da wir Nachrichten für eine große Anzahl von Domänen senden, ist die Verwendung bounces.example.comals unsere VERP-Domäne. Diese Domain muss hinzugefügt werden relay_domains. /etc/postfix/transport_mapsMit diesem Inhalt erstellen :

bounces.example.com             bulkbounce:

Fügen Sie dann eine Zeile hinzu, die der folgenden ähnelt /etc/postfix/master.cf:

bulkbounce unix - nn - pipe
  user = nobody argv = /usr/local/bin/bounce_handler.py $ {recipient}

Das bounce_handler.pySkript akzeptiert die VERP-Adresse als Befehlszeilenoption, analysiert sie und führt die erforderlichen Datenbankaktualisierungen durch, um den Bounce aufzuzeichnen.

Insyte
quelle
Oh, ich mag die Idee, das Empfänger-Delimeter zu verwenden, um sie zu gruppieren. In der Regel wird ein + verwendet, oder? Ich denke das wird super funktionieren, danke!
Brian Armstrong
11

Tatsächlich ist die Antwort von Instyle sehr schwierig zu implementieren, wenn Sie viele verschiedene Domänen unterstützen möchten, und sie ist falsch, weil:

a) Mit seinem Beispiel von transport_mapswerden alle an diese Domain gesendeten E-Mails an diesen bestimmten Dienst gesendet, ohne dass es darauf ankommt, ob die E-Mails zurückgesendete E-Mails sind oder nicht. Da es sich um einen bestimmten Domainnamen handelt, sollten E-Mails zwar nur zurückgesendet werden ... dies kann jedoch nicht garantiert werden.

b) Die an Ihr Skript gesendeten Daten sind die E-Mail selbst und nicht die Bounce-Nachricht. Mit anderen Worten, Ihr Code hat möglicherweise keine Ahnung, warum die E-Mail zurückgeschickt wurde (dh durch lokales Zurückschicken erhalten Sie nur die ursprüngliche E-Mail).


Die korrekte Methode zur Einrichtung in Postfix ist die Verwendung der Bounce-Benachrichtigungsklasse.

1) In /etc/postfix/main.cf

notify_classes = bounce
bounce_notice_recipient = [email protected]
transport_maps = hash:/etc/postfix/transport_maps

2) In / etc / postfix / transport_maps

# when you make changes to this file, run:
#   sudo postmap /etc/postfix/transport_maps
[email protected] bulkbounce:

Wie Sie sehen, weisen wir Postfix an, [email protected]immer dann zu verwenden, wenn eine E-Mail zurückgeschickt wird. Dann in der Transportkarte, um bulkbounceals Dienst zu verwenden, um jede E-Mail-Adresse zu verarbeiten [email protected].

Schließlich können Sie bulkbouncemit Ihrem Skript definieren :

3) In /etc/postfix/master.cf

bulkbounce unix -       n       n       -       -       pipe
  flags=FRq user=bounce argv=/home/bounce/bin/snapbounce --sender ${sender} --recipient ${recipient}

Für dieses Skript benötigen Sie einen Benutzer. nobodyist auch eine gute Wahl. Wenn Sie einen bestimmten Benutzer haben möchten, können Sie ihn erstellen mit:

useradd bounce

Ohne das Skript master.cfwerden die E-Mails an das Bulkbounce-Konto gesendet. Wenn Sie also ein Skript haben, das E-Mails aus Dateien analysiert, funktioniert dies ohne die Änderungen transport_mapsund master.cf.


Aus einem Kommentar unten:

fyi - re: double bounces ...
Wenn Sie die Absenderadresse ändern (z. B. VERP-Adresse) [email protected], möchten Sie die Zeile in main.cffür bounce_notice_recipientauskommentieren, wenn Sie die +idBounce nur in Ihrem Skript analysieren möchten .

Alexis Wilke
quelle
Auf Ihre Art erhalte ich den Bounce irgendwie zweimal, einmal mit bounce + id @ ... und einmal mit bounce @ ... von double-bounce - (der User-Bounce existiert aktuell nicht auf dem System - so wie ich es nicht vorhabe diese E-Mails 'speichern'). Die E-Mail wird mit einem Return-Pfad von bounce + id @ gesendet ... Irgendeine Idee, was ich vermisse?
RVandersteen
@RVandersteen Ich bin mir nicht sicher, warum Sie es zweimal bekommen würden. Der mit +id@kann eine Art Umschlag sein?
Alexis Wilke
Wenn ich unsere Standard-Absenderadresse verwende, wird der Absprung immer noch an [email protected] und [email protected] gesendet (kein Rücksprungpfad mehr hinzugefügt)
RVandersteen
1
Zum späteren Nachschlagen ändert das Hinzufügen der notify_classes nicht das Verhalten des MTA, der die Bounce-Nachricht an den FROM / Return-Pfad sendet. Es fügt Verhalten hinzu (sendet es auch an den notify_bounce_recipient). Dies ist der Grund, warum ich doppelte E-Mails erhalten habe. Dies beantwortet meine Frage (n) oben
RVandersteen
1
fyi - re: double bounces..wenn Sie die Absenderadresse ändern (VERP-Adresse wie '[email protected]'), sollten Sie die Zeile in main.cf für den 'bounce_notice_recipient' auskommentieren. Wenn Sie die + id-Bounce nur in Ihrem Skript
analysieren möchten
1

Die meisten modernen Mailinglisten-Programme können bereits mit VERP-Nachrichten umgehen, wenn der MTA so konfiguriert ist, dass sie an die Mailinglisten-Software zurückgegeben werden. Im Falle von GNU Mailman sollten Sie die FAQ- Seite mit dem passenden Namen "Wie verwende ich VERP mit einem - Begrenzer (Postfix recipient_delimiter)?"

Wenn Sie Ihre eigene Newsletter-Software erstellen, um dies zu bewältigen, sollten Sie sich fragen, warum Sie das Rad neu erfinden, anstatt vorhandene Anwendungen zu verwenden, die die Aufgabe einfach und problemlos für Sie erledigen können.

Jeremy Bouse
quelle
Ja, ich mache meine eigene Newsletter-Software. Das hat einen guten Grund!
Brian Armstrong
Dann sollten Sie darauf achten, VERP zu verwenden, um die Bounces richtig zu handhaben.
Jeremy Bouse
Hallo Jeremy, ich glaube, Sie haben Recht. VERP ist hier die Standardlösung, obwohl es nur nützlich zu sein scheint, den Absender und den Empfänger zu identifizieren. In diesem Fall müssen wir auch die bestimmte Nachricht identifizieren, die den Absprung verursacht hat. Ich glaube, wir müssen eine benutzerdefinierte Lösung mit unserer eigenen ID in der Adresse erstellen. Ich denke, mit der unten genannten Lösung mit einem Empfänger-Delimeter können wir sie in einem Bounce-Konto zusammenfassen. Vielen Dank für die Antwort, obwohl ich die Hilfe danke!
Brian Armstrong
Die Insyte-Lösung ist im Kern nur ein modifizierter VERP. Sie müssen lediglich sicherstellen, dass Ihr Bounce-Handler genügend eindeutige Kennungen zur Verfügung stellt, um ihn zu identifizieren. In den meisten Mailinglisten-Programmen ist dies die E-Mail-Adresse, es kann sich jedoch auch um alles andere handeln, da Sie Ihre eigene entwerfen.
Jeremy Bouse