Comment collecter des rebonds dans Postfix

15

Ceci est lié à cette question:

linux - Comment obtenir un rapport de rebond pour mon application de newsletter? - Erreur serveur

Supposons que je génère des adresses e-mail comme celle-ci lorsque j'envoie des newsletters pour identifier les rebonds et les désinscrire de ma newsletter: [email protected]

Je suppose que j'utiliserais cela dans le chemin de retour, non?

Alors comment pourrais-je le configurer dans postfix pour collecter toutes ces adresses préfixées avec "bounce-" dans une boîte aux lettres?

Enfin, j'ai entendu des gens mentionner un rebond doux contre un rebond dur. Quelqu'un peut-il expliquer les différents et comment ils devraient être comptés pour savoir quand supprimer définitivement quelqu'un d'une newsletter par e-mail?

Brian Armstrong
la source
Notez qu'une adresse e-mail qui comprend le mot "rebond" peut également être considérée comme "beurk" ... (spam) - cela étant dit, si vous pouvez coller la vôtre Message-Iddans votre en-tête, elle doit être renvoyée et cela être assez pour vérifier qui est qui.
Alexis Wilke

Réponses:

17

La réponse exacte à votre question (gestion de l' [email protected]adresse) dépend de la configuration de votre serveur pour recevoir du courrier. S'il example.coms'agit du domaine virtuel, le mieux que vous puissiez faire est de collecter les messages dans la [email protected]boîte aux lettres (en supposant recipient_delimiter = -).

Si example.comle domaine est livré localement pour le serveur (le courrier est remis aux comptes système réels), vous pouvez ajouter un .forwardfichier au répertoire de base de l' bounceutilisateur, qui le remet à un programme qui analyse les informations de rebond et les enregistre dans une base de données ou un fichier . Voir man localpour plus d'informations sur le .forwardformat et la façon de livrer un programme.

Ce que nous faisons, puisque nous envoyons des messages pour un grand nombre de domaines, est utilisé bounces.example.comcomme domaine VERP. Ce domaine doit être ajouté à relay_domains. Créez /etc/postfix/transport_mapsavec ce contenu:

bounces.example.com             bulkbounce:

Ensuite, ajoutez une ligne similaire à ceci /etc/postfix/master.cf:

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

Le bounce_handler.pyscript accepte l'adresse VERP comme option de ligne de commande, l'analyse et effectue les mises à jour de base de données nécessaires pour enregistrer le rebond.

Insyte
la source
Ooh, j'aime l'idée d'utiliser le délimiteur du destinataire pour les regrouper. En règle générale, un + est utilisé à droite? Je pense que cela fonctionnera très bien, merci!
Brian Armstrong
11

En fait, la réponse d'Instyle est très difficile à implémenter si vous souhaitez prendre en charge de nombreux domaines différents et elle est erronée car:

a) Avec son exemple de transport_maps, tous les e-mails envoyés à ce domaine sont envoyés à ce service spécifique sans égard au fait que les e-mails soient des e-mails renvoyés ou non. Puisqu'il utilise un nom de domaine spécifique, il ne doit en effet être renvoyé que par e-mails ... mais cela ne peut pas être garanti de cette façon.

b) Les données envoyées à votre script sont l'e-mail lui-même et non le message de rebond. En d'autres termes, votre code peut n'avoir aucune idée de la raison pour laquelle l'e-mail a été renvoyé (c'est-à-dire que le rebond local vous enverra uniquement l'e-mail d'origine.)


La bonne façon de faire cette configuration dans postfix est d'utiliser la classe de notification de rebond.

1) Dans /etc/postfix/main.cf

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

2) Dans / etc / postfix / transport_maps

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

Comme vous pouvez le voir, nous demandons maintenant à postfix d'utiliser [email protected]chaque fois qu'un e-mail est renvoyé. Ensuite, dans la carte de transport, à utiliser bulkbouncecomme service pour gérer n'importe quelle adresse e-mail [email protected].

Enfin, vous pouvez définir bulkbounceavec votre script:

3) Dans /etc/postfix/master.cf

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

Ce script nécessite que vous ayez un utilisateur. nobodyest aussi un bon choix. Si vous souhaitez avoir un utilisateur spécifique, vous pouvez le créer avec:

useradd bounce

Sans le script master.cf, les e-mails sont envoyés au compte bulkbounce. Donc, si vous avez un script qui analyse les e-mails des fichiers, cela fonctionnerait sans les modifications transport_mapset master.cf.


D'après un commentaire ci-dessous:

fyi-re: double rebonds ...
si vous modifiez l'adresse de retour (adresse VERP comme [email protected], alors vous voudrez commenter la ligne main.cfpour le bounce_notice_recipient, si vous êtes intéressé à analyser le +idrebond uniquement dans votre script.

Alexis Wilke
la source
En utilisant votre chemin, je reçois en quelque sorte le rebond deux fois, une fois avec rebond + id @ ... et une fois avec rebond @ ... de double-rebond - (le rebond utilisateur n'existe pas réellement sur le système - car je n'ai pas l'intention de «enregistrer» ces e-mails). L'email est envoyé avec un chemin de retour de rebond + id @ ... Une idée de ce qui me manque?
RVandersteen
@RVandersteen Je ne sais pas trop pourquoi vous l'obtiendrez deux fois. Celui avec +id@peut être une enveloppe quelconque?
Alexis Wilke
Lorsque j'utilise notre adresse par défaut - le rebond est toujours envoyé à [email protected] et [email protected] (plus aucun chemin de retour ajouté)
RVandersteen
1
Pour référence future, l'ajout des notify_classes ne modifie pas le comportement du MTA envoyant le message de rebond au chemin FROM / Return. Il ajoute un comportement par-dessus (l'envoie également au notify_bounce_recipient). C'est pourquoi j'ai reçu des doubles mails. Ce qui répond à ma (mes) question (s) ci
RVandersteen
1
fyi-re: double rebonds..si vous modifiez l'adresse de retour (adresse VERP telle que '[email protected]', alors vous voudrez commenter la ligne dans main.cf pour le 'bounce_notice_recipient', si vous souhaitez analyser le rebond + id uniquement dans votre script
sarora
1

La plupart des logiciels de liste de diffusion modernes savent déjà comment gérer les messages VERP si le MTA est correctement configuré pour les renvoyer au logiciel de liste de diffusion. Dans le cas de GNU Mailman, vous devriez vérifier la page FAQ qui porte bien son nom "Comment utiliser VERP avec un délimiteur - (Postfix recipient_delimiter)?".

Si vous créez votre propre logiciel de newsletter personnalisé pour gérer cela, vous devriez vous demander pourquoi vous réinventez la roue au lieu d'utiliser des applications existantes qui peuvent déjà gérer la tâche simplement et facilement pour vous.

Jeremy Bouse
la source
Oui, je crée mon propre logiciel de newsletter. Il y a une bonne raison!
Brian Armstrong
Ensuite, vous devriez envisager d'utiliser VERP pour gérer correctement les rebonds.
Jeremy Bouse
Salut Jeremy, je pense que vous avez raison VERP est la solution standard ici, bien qu'il semble qu'il ne soit utile que d'identifier l'expéditeur et le destinataire. Dans ce cas, nous devons également identifier le message particulier qui a provoqué le rebond, donc je pense que nous devrons faire une solution personnalisée avec notre propre ID dans l'adresse. Je pense que la solution mentionnée ci-dessous en utilisant un délimiteur de destinataire nous permettra de les regrouper dans un compte rebond. Merci pour la réponse mais j'apprécie l'aide!
Brian Armstrong
La solution d'Insyte n'est qu'un VERP modifié en son cœur. Vous devez simplement vous assurer qu'il fournit suffisamment d'un identifiant unique pour que votre gestionnaire de rebonds puisse l'identifier. Dans la plupart des logiciels de liste de diffusion, il s'agit de l'adresse e-mail, mais cela peut être n'importe quoi puisque vous concevez la vôtre.
Jeremy Bouse