Come raccogliere rimbalzi in postfix


15

Questo è legato a questa domanda:

Linux - Modi per ottenere un rapporto di rimbalzo per la mia applicazione di newsletter? - Errore del server

Diciamo che sto generando indirizzi di posta elettronica come questo quando invio newsletter per identificare i rimbalzi e cancellarli dalla mia newsletter: rimbalzo-123456789@esempio.com

Presumo che lo userei nel percorso di ritorno, giusto?

Quindi come lo configurerei in postfix per raccogliere tutti questi indirizzi con il prefisso "bounce-" in una casella di posta?

Infine, ho sentito la gente menzionare un leggero rimbalzo contro un forte rimbalzo. Qualcuno può spiegare i diversi e come dovrebbero essere contati per sapere quando rimuovere definitivamente qualcuno da una newsletter e-mail?


Si noti che un indirizzo e-mail che include la parola "rimbalzo" può anche essere visto come "schifo" ... (spam) - detto ciò, se si può attaccare il proprio Message-Idnell'intestazione, deve essere rispedito e che basta controllare chi è chi.
Alexis Wilke,

Risposte:


17

La risposta esatta alla tua domanda (gestione bounce-xxx@example.comdell'indirizzo) dipende da come il tuo server è configurato per ricevere la posta. Se example.comè il dominio virtuale, la cosa migliore che puoi fare è raccogliere i messaggi nella bounce@example.comcassetta postale (supponendo recipient_delimiter = -).

Se example.comè il dominio recapitato localmente per il server (la posta viene recapitata agli account di sistema effettivi), è possibile aggiungere un .forwardfile alla home directory bouncedell'utente, che consegna a un programma che analizza le informazioni di rimbalzo e le registra in un database o file . Vedere man localper ulteriori informazioni sul .forwardformato e su come consegnare a un programma.

Quello che facciamo, poiché inviamo messaggi per un gran numero di domini, è usare bounces.example.comcome nostro dominio VERP. Questo dominio deve essere aggiunto a relay_domains. Crea /etc/postfix/transport_mapscon questo contenuto:

bounces.example.com             bulkbounce:

Quindi aggiungi una riga simile a questa a /etc/postfix/master.cf:

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

Lo bounce_handler.pyscript accetta l'indirizzo VERP come opzione della riga di comando, lo analizza e apporta gli aggiornamenti del database necessari per registrare il rimbalzo.


Ooh, mi piace l'idea di usare il delimitatore del destinatario per raggrupparli. In genere viene usato un + giusto? Penso che funzionerà alla grande, grazie!
Brian Armstrong,

11

In realtà, la risposta di Instyle è molto difficile da implementare se si desidera supportare molti domini diversi ed è errata perché:

a) Con il suo esempio di transport_maps, tutte le e-mail inviate a quel dominio vengono inviate a quel servizio specifico indipendentemente dal fatto che le e-mail siano o meno e-mail rimbalzate. Dal momento che utilizza un nome di dominio specifico, in realtà dovrebbe essere solo e-mail rimbalzate ... ma non può essere garantito in questo modo.

b) I dati inviati al tuo script sono l'e-mail stessa e non il messaggio di rimbalzo. In altre parole, il tuo codice potrebbe non avere idea del motivo per cui l'e-mail è stata rimbalzata (ovvero il rimbalzo locale ti invierà solo l'e-mail originale).


Il modo corretto di eseguire tale configurazione in postfix è utilizzare la classe di notifica di rimbalzo.

1) In /etc/postfix/main.cf

notify_classes = bounce
bounce_notice_recipient = bounces@example.com
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
bounces@example.com bulkbounce:

Come puoi vedere, ora diciamo a postfix di usarlo bounces@example.comogni volta che viene rimbalzata un'e-mail. Quindi nella mappa di trasporto, utilizzare bulkbouncecome servizio per gestire qualsiasi indirizzo e-mail bounces@example.com.

Finalmente puoi definire bulkbouncecon il tuo script:

3) In /etc/postfix/master.cf

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

Questo script richiede di avere un utente. nobodyè anche una buona scelta. Se vuoi avere un utente specifico, puoi crearlo con:

useradd bounce

Senza lo script in master.cf, le e-mail vengono inviate all'account bulkbounce. Quindi, se si dispone di uno script che analizza le e-mail dai file, questo funzionerebbe senza il transport_mapse le master.cfmodifiche.


Da un commento qui sotto:

fyi - re: doppi rimbalzi ...
se stai modificando l'indirizzo di ritorno (indirizzo VERP come user+id@fromdomain.com, allora vorrai commentare la riga main.cfper bounce_notice_recipient, se sei interessato ad analizzare il +idrimbalzo solo nel tuo script.


Usando la tua strada, in qualche modo ricevo il rimbalzo due volte, una volta con rimbalzo + id @ ... e una volta con rimbalzo @ ... dal doppio rimbalzo (l'utente non ha effettivamente il rimbalzo sul sistema) poiché non intendo "salva" queste e-mail). L'email viene inviata con un percorso di ritorno di bounce + id @ ... Qualche idea su cosa mi sto perdendo?
RVandersteen,

@RVandersteen Non sono troppo sicuro del perché l'avresti preso due volte. Quello con +id@potrebbe essere una busta di qualche tipo?
Alexis Wilke,

Quando utilizzo il nostro indirizzo "from" predefinito, il rimbalzo viene comunque inviato a bounce@example.com e originalfrom@example.com (nessun percorso di ritorno aggiunto più)
RVandersteen

1
Per riferimento futuro, l'aggiunta di notification_classes non modifica il comportamento dell'MTA che invia il messaggio di rimbalzo al percorso FROM / Return. Aggiunge il comportamento sopra di esso (lo invia anche a notification_bounce_recipient). Questo è il motivo per cui ho ricevuto una doppia posta. Che risponde alle mie domande precedenti
RVandersteen

1
a proposito: double bounces..se stai modificando l'indirizzo di ritorno (indirizzo VERP come 'user+id@fromdomain.com', allora vorrai commentare la riga in main.cf per il 'bounce_notice_recipient', se sei interessato ad analizzare il rimbalzo + id solo nella tua sceneggiatura.
sarora

1

La maggior parte dei moderni software di mailing list sa già come gestire i messaggi VERP se l'MTA è correttamente configurato per restituirli al software della mailing list. Nel caso di GNU Mailman dovresti controllare la pagina FAQ chiamata "Come posso usare VERP con un delimitatore - (Postfix recipient_delimiter)?".

Se stai creando il tuo software di newsletter personalizzato per gestirlo, dovresti chiederti perché stai reinventando la ruota invece di utilizzare le applicazioni esistenti che possono gestire l'attività già semplicemente e facilmente per te.


Sì, sto creando il mio software per newsletter. C'è una buona ragione!
Brian Armstrong,

Quindi dovresti guardare usando VERP per gestire correttamente i rimbalzi.
Jeremy Bouse,

Ciao Jeremy, penso che tu abbia ragione VERP è la soluzione standard qui, anche se sembra utile identificare il mittente e il destinatario. In questo caso dobbiamo anche identificare il particolare messaggio che è uscito che ha causato il rimbalzo, quindi credo che dovremo fare una soluzione personalizzata con il nostro ID nell'indirizzo. Penso che la soluzione menzionata sotto usando un delimitatore del destinatario ci permetterà di raggrupparli in un account di rimbalzo. Grazie per la risposta, anche se apprezzo l'aiuto!
Brian Armstrong,

La soluzione di Insyte è solo un VERP modificato al suo interno. Devi solo assicurarti che fornisca un identificatore univoco sufficiente al tuo gestore di rimbalzi per identificarlo. Nella maggior parte dei software di mailing list che è l'indirizzo e-mail, ma potrebbe essere qualsiasi cosa dal momento che stai progettando il tuo.
Jeremy Bouse,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.