Postfix - 将多个收件人消息作为单个消息进行管道传输

ctp*_*p_9 6 postfix pipe

我正在尝试通过 Postfix 将电子邮件通过管道传输到我拥有的 Python 脚本。目前,具有多个收件人的消息会针对每个收件人通过管道传送到脚本一次。无论收件人数量如何,我都希望将这些消息通过管道传送到脚本一次。

在 /etc/postfix/main.cf 我有:

default_transport = customsmtp
Run Code Online (Sandbox Code Playgroud)

该传输方法在 /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}
Run Code Online (Sandbox Code Playgroud)

以下是 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
Run Code Online (Sandbox Code Playgroud)

作为 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
Run Code Online (Sandbox Code Playgroud)

mas*_*oeh 2

将这些参数添加到main.cf

virtual_alias_maps = pcre:/etc/postfix/deduplicate
enable_original_recipient = no
Run Code Online (Sandbox Code Playgroud)

然后在deduplicate文件中,放入

/.*/   dummy@gmail.com
Run Code Online (Sandbox Code Playgroud)

不要忘记执行postfix reload

解释:

参数enable_original_recipient将防止在别名为虚拟@gmail.com时出现重复。别名后,postfix 将通过管道将电子邮件发送到customsmtp

警告:

脚本中的参数收件人将替换为 dummy@gmail.com。所以你会失去原来的收件人