5 votes

Postfix - Transmettre un message à plusieurs destinataires en tant que message unique

Je tente de faire transiter des e-mails via Postfix vers un script Python que j'ai. Actuellement, les messages avec plusieurs destinataires sont transmis au script une fois pour chaque destinataire. J'aimerais que ces messages soient transmis au script une seule fois, indépendamment du nombre de destinataires.

Dans /etc/postfix/main.cf, j'ai :

default_transport = customsmtp

Et cette méthode de transport est définie dans /etc/postfix/master.cf comme suit :

customsmtp  unix  -      n      n     -     -     pipe
    flags=FR  user=cody argv=/var/relay/custom-relay/endpoint.py type:relay env:production sender:${sender} recipient:${recipient}

Voici un extrait des journaux des e-mails de Postfix montrant les multiples envois au script :

Mar 19 20:26:29 ip-172-31-2-6 postfix/cleanup[18639]: 2ACDD24199: message-id=<000a01d06282$fd7c59c0$f8750d40$@bananatag.com>
Mar 19 20:26:29 ip-172-31-2-6 postfix/qmgr[29229]: 2ACDD24199: from=, size=2715, nrcpt=2 (queue active)
Mar 19 20:26:30 ip-172-31-2-6 postfix/pipe[18640]: 2ACDD24199: to=, relay=customsmtp, delay=0.89, delays=0.2/0.01/0/0.67, dsn=2.0.0, status=sent (delivered via customsmtp service)
Mar 19 20:26:30 ip-172-31-2-6 postfix/pipe[18641]: 2ACDD24199: to=, relay=customsmtp, delay=0.9, delays=0.2/0.04/0/0.66, dsn=2.0.0, status=sent (delivered via customsmtp service)
Mar 19 20:26:30 ip-172-31-2-6 postfix/qmgr[29229]: 2ACDD24199: removed

Étant relativement nouveau à Postfix, je ne suis pas sûr des autres paramètres qui doivent être configurés pour permettre que cela se produise. Quels autres paramètres de configuration devrais-je modifier ou quelle autre information puis-je fournir pour obtenir de l'aide sur ce problème?

MODIFICATION

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
default_transport = customsmtp
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = cody.example.com
myhostname = cody.example.com
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_invalid_helo_hostname
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = cyrus
smtpd_tls_CAfile = /etc/path/to/crt.crt
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/path/to/crt2.crt
smtpd_tls_key_file = /etc/path/to/key.key
smtpd_tls_loglevel = 1
smtpd_tls_security_level = encrypt
smtpd_tls_session_cache_database = btree:/var/spool/postfix/smtpd_tls_cache
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 550

0 votes

Avez-vous besoin de rediriger TOUS les e-mails (domaine local et externe) ? Ou avez-vous seulement besoin de traiter les e-mails vers un domaine externe ?

0 votes

Tous les e-mails seront envoyés vers des domaines externes et devront passer à travers le script.

2voto

masegaloeh Points 17760

Ajoutez ces paramètres dans main.cf

virtual_alias_maps = pcre:/etc/postfix/deduplicate
enable_original_recipient = no

Ensuite, dans le fichier deduplicate, mettez

/.*/   dummy@gmail.com

N'oubliez pas d'exécuter postfix reload

Explication :

Le paramètre enable_original_recipient empêchera la duplication en cas d'alias vers dummy@gmail.com. Après l'alias, postfix enverra l'e-mail à customsmtp

Attention :

Le paramètre destinataire dans votre script sera remplacé par dummy@gmail.com. Vous perdrez donc les destinataires originaux

0 votes

Est-il possible d'empêcher Postfix de diviser le message initial plutôt que de supprimer les doublons? J'aimerais vraiment préserver les destinataires originaux.

0 votes

Que voulez-vous dire par empêcher Postfix de diviser le message initial plutôt que de supprimer les doublons ? Pouvez-vous donner un exemple?

0 votes

Ma compréhension de Postfix est que les messages, quel que soit le nombre de destinataires, entrent dans la file d'attente entrante de Postfix en tant que message unique. Ensuite, le gestionnaire de files d'attente de Postfix envoie des demandes de livraison à l'agent de livraison de type "pipe". Plutôt que d'envoyer une demande de livraison par destinataire, je voudrais envoyer une demande de livraison à l'agent de livraison de type "pipe" par message entrant.

2voto

Zulakis Points 3947

La configuration suivante semble fonctionner pour votre objectif:

main.cf: (par défaut sur Ubuntu sauf pour mydestination, default_transport et local_transport)

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# l'ajout de .domaine est le travail du MUA.
append_dot_mydomain = no

readme_directory = no

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = vagrant-ubuntu-trusty-64
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = vagrant-ubuntu-trusty-64, localhost.localdomain, , localhost, example.org
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
default_transport=test
local_transport=test

master.cf:

test    unix  -    n    n    -    -   pipe
    user=nobody argv=/usr/local/bin/test ${sender} ${recipient}

/usr/local/bin/test:

#!/bin/sh
logfile="/tmp/postfix_transport.log"
content=`cat`
date -R >> "$logfile"
echo "$@" >> "$logfile"

Envoyer un email en utilisant sendmail -f user@user.com test@example.org root@example.org < mail génère le message suivant dans /tmp/postfix_transport.log:

Dim, 03 Mai 2015 19:19:47 +0000
user@user.com root@example.org test@example.org

0 votes

J'ai essayé local_delivery = my smtp mais n'ai pas réussi à déclencher le pipe une fois pour tous les destinataires. Les autres configurations que vous avez notées sont par défaut. Que puis-je faire d'autre ?

-2voto

Elina Wu Points 31

https://github.com/ureyni/postfix.3.1 pourrait être une solution à votre question

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X