Я пытаюсь направлять электронные письма через Postfix в имеющийся у меня сценарий Python. В настоящее время сообщения с несколькими получателями передаются в сценарий по конвейеру для каждого получателя. Я хотел бы, чтобы эти сообщения передавались в сценарий только один раз, независимо от количества получателей.
В /etc/postfix/main.cf у меня есть:
default_transport = customsmtp
И этот транспортный метод определен в /etc/postfix/master.cf как:
customsmtp unix - n n - - pipe
flags=FR user=cody argv=/var/relay/custom-relay/endpoint.py type:relay env:production sender:${sender} recipient:${recipient}
Вот выдержка из почтовых журналов Postfix, показывающая множественные доставки скрипту:
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=<cody@email.com>, size=2715, nrcpt=2 (queue active)
Mar 19 20:26:30 ip-172-31-2-6 postfix/pipe[18640]: 2ACDD24199: to=<cody@example.com>, 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=<cody@testing.com>, 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
Как человек относительно новичок в Postfix, я не уверен, какие еще параметры нужно настроить, чтобы это произошло. Какие еще параметры конфигурации мне нужно изменить или есть ли дополнительная информация, которую я могу предоставить, чтобы получить помощь по этой проблеме?
РЕДАКТИРОВАТЬ
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
Следующая конфигурация, похоже, подходит для ваших целей:
main.cf: (по умолчанию в ubuntu, кроме mydestination
, default_transport
и local_transport
)
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
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 / местный / бен / тест:
#!/bin/sh
logfile="/tmp/postfix_transport.log"
content=`cat`
date -R >> "$logfile"
echo "$@" >> "$logfile"
Отправка электронного письма с помощью sendmail -f user@user.com test@example.org root@example.org < mail
генерирует следующее сообщение в /tmp/postfix_transport.log
:
Sun, 03 May 2015 19:19:47 +0000
user@user.com root@example.org test@example.org
Добавьте эти параметры в main.cf
virtual_alias_maps = pcre:/etc/postfix/deduplicate
enable_original_recipient = no
Затем в deduplicate
файл, положить
/.*/ dummy@gmail.com
Не забудьте выполнить postfix reload
Пояснение:
Параметр enable_original_recipient предотвратит дублирование при наложении псевдонима на dummy @ gmail.com. После псевдонима postfix направит письмо на таможня
Предостережение:
Параметр «получатель» в вашем скрипте будет заменен на dummy@gmail.com. Таким образом, вы потеряете первоначальных получателей
https://github.com/ureyni/postfix.3.1 может быть решением вашего вопроса