如何“过滤”后缀生成的退回邮件?

Fli*_*mzy 8 postfix

我们在高度自定义的垃圾邮件过滤配置中使用 postfix 2.7 和自定义 SMTPD(基于 qpsmtpd)。我们有一个新要求,即通过我们的自定义 qpsmtpd 流程过滤后缀生成的反弹(不是针对内容过滤,而是相应地处理这些反弹)。

我们当前的配置看起来(部分)是这样的:

main.cf(仅显示自定义):

2526      inet  n       -       -       -       0       cleanup
pickup    fifo  n       -       -       60      1       pickup
  -o content_filter=smtp:127.0.0.2
Run Code Online (Sandbox Code Playgroud)

我们的 smtpd 通过直接与清理守护进程对话,将消息注入端口 2526 上的 postfix。自定义取件命令指示 postfix 将所有本地生成的邮件(来自 cron、nagios 或其他自定义脚本)移交给我们的自定义 smtpd。

问题是此配置不会影响 postfix 生成的退回邮件,因为它们不通过拾取守护程序。

我曾尝试向反弹守护程序命令添加相同的 content_filter 选项,但它似乎没有任何效果:

bounce    unix  -       -       -       -       0       bounce
-o content_filter=smtp:127.0.0.2
defer     unix  -       -       -       -       0       bounce
-o content_filter=smtp:127.0.0.2
trace     unix  -       -       -       -       0       bounce
-o content_filter=smtp:127.0.0.2
Run Code Online (Sandbox Code Playgroud)

作为参考,这里也是我的main.cf文件:

biff = no
# TLS parameters
smtpd_tls_loglevel = 0
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
smtp_tls_security_level = may

mydestination = $myhostname
alias_maps = proxy:pgsql:/etc/postfix/dc-aliases.cf
transport_maps = proxy:pgsql:/etc/postfix/dc-transport.cf

# This is enforced on incoming mail by QPSMTPD, so this is simply
# the upper possible bound (also enforced in defaults.pl)
message_size_limit = 262144000
mailbox_size_limit = 0

# We do our own message expiration, but if we set this to 0, then postfix
# will try each mail delivery only once, so instead we set it to 100 days
# (which is the max postfix seems to support)
maximal_queue_lifetime = 100d

hash_queue_depth = 1
hash_queue_names = deferred, defer, hold
Run Code Online (Sandbox Code Playgroud)

我还尝试将 internal_mail_filter_classes 选项添加到 main.cf,但也没有影响:

internal_mail_filter_classes = bounce,notify
Run Code Online (Sandbox Code Playgroud)

我愿意接受任何建议,包括以不同的方式处理我们当前的内容过滤循环。

如果不清楚我要问什么,请告诉我,我可以尝试澄清。

mai*_*ilq 4

在这种情况下,你做得太复杂了。这是最简单的方法。

您需要在您的main.cf

notify_classes = resource, software, bounce, 2bounce
bounce_notice_recipient = random.bounce@example.com
2bounce_notice_recipient = random.bounce@example.com
transport_maps = hash:/etc/postfix/transport_maps   #or another file. See below.
Run Code Online (Sandbox Code Playgroud)

/etc/postfix/transport_maps

random.bounce@example.com    smtp:127.0.0.2:25
Run Code Online (Sandbox Code Playgroud)

然后postmap /etc/postfix/transport_maps。然后postfix reload或重新启动 Postfix。

这将通知 random.bounce@example.com 用户所有退回邮件,并且据说该用户是通过 127.0.0.2:25 传输的,您将通过该服务器获取所有这些邮件。根据您的环境替换地址/IP/端口。