Alias ​​Postfix et e-mails en double, comment y remédier?


18

J'ai des alias configurés dans postfix, tels que les suivants:

all@mydomain.com:    foo@mydomain.com, bar@mydomain.com ...

Lorsqu'un e-mail est envoyé à all@mydomain.com et que l'un des destinataires de cet alias est cc: ed, ce qui est assez courant (par exemple: "Répondre à tous"), l'e-mail est remis en double. Par exemple, si un e-mail est envoyé à all@mydomain.com et foo@mydomain.com est cc: ed, il sera envoyé deux fois. Selon la FAQ Postfix , cela est voulu par la conception car Postfix envoie des e-mails en parallèle sans étendre les groupes, ce qui le rend plus rapide que sendmail. Maintenant, tout va bien et dandy, mais est-il possible de configurer Postfix pour supprimer réellement les destinataires en double avant d'envoyer l'e-mail?

J'ai trouvé beaucoup de messages de personnes partout sur le net qui ont le même problème, mais je n'ai pas encore trouvé de réponse. Si cela n'est pas possible dans Postfix, est-il possible de le faire quelque part en cours de route? J'ai essayé d'éduquer mes utilisateurs, mais c'est plutôt futile j'ai peur ...

J'utilise postfix sur Mac OS X Server 10.6, amavis est défini comme content_filter et dovecot est défini comme mailbox_command. J'ai essayé de configurer procmail en tant que content_filter pour la livraison smtp (selon la suggestion ci-dessous), mais je n'arrive pas à faire les choses correctement. Pour diverses raisons, je ne peux pas remplacer la configuration standard d'OS X, ce qui signifie que postfix, amavis et dovecot restent en place. Je peux cependant y ajouter si je le souhaite.


Je pense que ce n'est vraiment pas possible ...
Antoine Benkemoun

Je commence vraiment à croire que tu as raison Antoine.
Marcus Stade

Eh bien, c'était une perte de prime ...
Marcus Stade

2
Avez-vous déjà trouvé une solution pour cela? J'ai le même problème.
Tommy Arnold

Réponses:


4

Postfix n'a aucune idée des e-mails en double en raison de sa structure. Il est possible de faire ce que vous proposez en utilisant procmail comme agent de livraison.

Essentiellement, chaque message provenant d'un client doit être livré avec un ID de message unique. Dans le cas où il est livré à plusieurs personnes, l'ID de message doit être le même, nous enregistrons donc tous les en- Message-Idtêtes que nous avons vus et supprimés et les futurs qui correspondent à cette liste.

Depuis http://novosial.org/procmail/

:0 Wh: msgid.lock
| formail -D 8192 ~/.procmail/msgid.cache

Si je comprends bien le problème, il n'est pas possible de le résoudre dans Postfix car Postfix envoie les e-mails en parallèle, c'est-à-dire qu'il envoie à foo@mydomain.com en même temps qu'il étend all@mydomain.com, puis à nouveau envoie à foo@mydomain.com. La solution Procmail n'introduirait-elle pas alors une condition de concurrence critique où un autre e-mail sans rapport (avec un identifiant de message différent) est envoyé entre les deux e-mails en question et écraserait ainsi le cache de sorte que les e-mails en double soient livré de toute façon?
Marcus Stade

J'essaie de faire fonctionner votre suggestion, mais je ne sais pas vraiment comment combiner cela avec la livraison de pigeonnier, qui est utilisée par OS X 10.5+ par défaut.
Marcus Stade

Si vous utilisez dovecot en tant qu'agent de livraison, vous pouvez utiliser procmail comme un content_filterqui vous permettra d'effectuer la même tâche au niveau mondial
Philip Reynolds

Je dois avouer que je suis probablement au-dessus de ma tête ici. Je me suis regardé aveuglément sur la page des paramètres de configuration pour postfix et googlé jusqu'à ce que mes doigts saignent, mais je n'arrive pas à comprendre comment configurer cela. Toutes les ressources que vous connaissez ou les poussées dans la bonne direction seraient vraiment appréciées!
Marcus Stade

Je pense que je comprends en quelque sorte comment cela fonctionne maintenant, mais il y a déjà un content_filter réglé sur amavis. Cela semble être une sorte de vérificateur antivirus. J'ai lu qu'il est possible de chaîner content_filters, mais cela semble plutôt peu intuitif et la documentation est moins que stellaire. C'est vraiment ridicule de voir à quel point il est difficile de simplement éliminer les e-mails en double. Design desicions malgré tout, cela me semble comme il devrait être là-dedans hors de la boîte ou du moins ne pas nécessiter ces hacks monstruos.
Marcus Stade

3

Il existe un moyen de le faire, mais sans utiliser Postfix lui-même.

Si vous utilisez un Dovecot avec une implémentation de Pigeonhole de Sieve relativement récent , il existe une extension spéciale qui peut être utilisée pour la déduplication à la livraison. Dans Dovecot plus ancien que 2.2.18, le nom de cette extension est "vnd.dovecot.duplicate" et elle est désactivée par défaut, dans les versions plus récentes, l' extension est appelée "duplicate" et devrait déjà être activée, mais l'activer explicitement ne le sera pas nuire.

/etc/dovecot/conf.d/90-sieve.conf:

plugin {
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve

  sieve_before = /mnt/mail/users/global_sieve/deduplicate.sieve
  # sieve_before2 = /mnt/mail/users/global_sieve/antispam.sieve

  sieve_extensions = +vnd.dovecot.duplicate  # for dovecot < 2.2.18
  #sieve_extensions = +duplicate             # for dovecot >= 2.2.18
}

Créez ensuite le script sieve pour gérer la déduplication elle-même (vous pouvez ajuster le nom de fichier comme bon vous semble).

/mnt/mail/users/global_sieve/deduplicate.sieve:

require "vnd.dovecot.duplicate"; # for dovecot < 2.2.18
# require "duplicate";           # for dovecot >= 2.2.18

if duplicate {
    discard;
    stop;
}

Compilez le script à l'aide de sievec et assurez-vous que le script est lisible par l' utilisateur dovecot . Plus dans les documents Dovecot.

Si vous utilisez Cyrus, il existe une fonction de suppression de remise des messages en double qui peut être activée à l'aide de suppress_duplicates = yes.


Merci beaucoup d'avoir signalé ce mécanisme. Ce sentiment de "trouver une aiguille dans une botte de foin".
lkraav

Découvertes en cours d'implémentation: l' duplicateextension fonctionne au niveau utilisateur. J'essayais d'arrêter les doublons sur plusieurs utilisateurs To / Cc-d dans une fileintoboîte aux lettres centrale . Ça ne marche pas. J'ai également dû définir une virtual_alias_mapsentrée fourre-tout postfix , telle que @domain.com catchall@domain.com, puis la vérification des doublons de tamis atteindra catchallla liste des doublons de l'utilisateur.
lkraav

Oui, c'est très similaire au sentiment de "trouver une aiguille dans une botte de foin"
Net Runner


0

Ceci provient d'une ancienne FAQ postfix:

Postfix envoie des messages en double Certaines personnes se plaindront que Postfix envoie des messages en double. Cela se produit chaque fois qu'un message est envoyé à plusieurs adresses qui atteignent le même utilisateur. Des exemples de tels scénarios sont:

  • Un message est envoyé à l'utilisateur et à un alias qui répertorie l'utilisateur. L'utilisateur reçoit directement une copie du courrier et une copie via l'alias.

    • Un message est envoyé à plusieurs alias qui répertorient l'utilisateur. L'utilisateur reçoit une copie du courrier via chaque alias.

Certains diront même que c'est le "bon" comportement. C'est probablement plus une question d'attente et de ce à quoi on est habitué.

Cela ne peut être "corrigé" qu'en ralentissant Postfix. Dans les exemples ci-dessus, Postfix devrait d'abord développer complètement toutes les listes de distribution avant de commencer toute livraison. De par sa conception, Postfix livre du courrier vers différentes destinations en parallèle, et la livraison locale ne fait pas exception. C'est pourquoi Postfix peut être plus rapide que sendmail.

Donc, par conception, vous voyez ce comportement. Peut-être que si vous trouvez un filtre de contenu qui peut supprimer les ID de message en double, vous pouvez l'éliminer après l'événement de remise.

Sendmail n'a pas ce problème car il développe tout d'abord et supprime les doublons.


Oui, je l'ai lu, j'aurais peut-être dû mettre à jour ma question. De par leur conception ou non, c'est toujours un problème. Je comprends pourquoi il se comporte comme ça et je comprends qu'essayer de trouver une solution dans Postfix est futile. Cependant, j'ai essayé de trouver une solution de filtrage de contenu à l'aide de Procmail et je n'arrive pas à faire les choses correctement. Il est fort probable que je ne comprenne pas correctement les filtres de contenu ou procmail, ou les deux. Dans les deux cas, je voudrais toujours résoudre ce problème. Malheureusement, la configuration telle qu'elle est ne peut pas être modifiée, seulement ajoutée à. Je ne peux malheureusement pas utiliser sendmail au lieu de postfix.
Marcus Stade

J'ai mis à jour la question avec plus d'informations mais honnêtement, le lien vers la FAQ était là pour commencer. J'apprécie cependant toutes les suggestions utiles!
Marcus Stade

Je ne savais pas que c'était un lien vers le même contenu. En travaillant dans la sécurité informatique, vous devenez plutôt paranoïaque en cliquant sur des liens aléatoires. Pouvez-vous confirmer que les messages en double ont les mêmes ID de message?
jeffatrackaid

La journée a été longue, je dois donc revoir votre message d'origine, mais qu'en est-il de cela: postfix.org/postconf.5.html#duplicate_filter_limit
jeffatrackaid

Je peux en effet confirmer que les messages en double ont les mêmes identifiants de message. La définition de duplicate_filter_limit ne fait malheureusement rien pour vous aider.
Marcus Stade

0

La solution officielle est ici .. http://osdir.com/ml/mail.postfix.devel/2007-05/msg00010.html

duplicate_filter_limit (10000) Le nombre maximal d'adresses mémorisées par les filtres en double du destinataire pour l'expansion des alias (5) ou virtuels (5), ou pour les affichages de file d'attente showq (8) (avec les versions antérieures de Postfix, la limite par défaut était de 1000).

duplicate_filter_style (strict) La politique de filtrage des destinataires en double: stricte ou pragmatique.


1
Cela ne semble rien faire ...
grufftech

postfix.1071664.n5.nabble.com/… affirme que cela n'a jamais été mis en œuvre
Yanko Hernández Álvarez

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.