队列前内容过滤器不会将数据注入回 Postfix

队列前内容过滤器不会将数据注入回 Postfix

我一直在使用 NodeJS 上的 Postfix 构建一个队列前过滤器,以从外发邮件中检索数据、删除附件、将其上传到 CDN 并将 URL 注入外发邮件中。

到目前为止,我想没有什么太复杂的,因为 Postfix 支持通过队列前内容过滤器

实施过滤器并遵循 Postfix 文档后,我能够检索发出的邮件并将其发送回 Postfix。

但是,Postfix 无法识别通过“代理”特定配置传入的邮件,因为这些邮件是通过队列前内容过滤器注入的。它仍会将其添加到队列并正确发送,但不会首先关闭 SMTP 客户端打开的会话。

我已经研究这个错误好几个星期了,并浏览了整个网络寻找答案,但这个主题似乎没有太多的文档。我发现 Milters 可能是该问题的另一种解决方案,但它似乎比仅使用 SMTP 与 Postfix 通信更复杂。

以下是配置文件:

master.cf:

submission inet n                               -                               -                               -      smtpd
        -o syslog_name=postfix/submissions
        -o smtpd_proxy_filter=127.0.0.1:9830
        -o smtpd_proxy_ehlo=mail.clebard.cloud
        -o smtpd_proxy_options=speed_adjust
        -o smtpd_tls_auth_only=no
        -o smtpd_tls_dh1024_param_file=${config_directory}/dh2048.pem
        -o smtpd_enforce_tls=no
        -o smtpd_tls_security_level=may
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject
127.0.0.1:9821  inet    n                       -                       -                       -                      smtpd -v
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8
        -o syslog_name=postfix/afterfilter
        -o smtpd_enforce_tls=no
        -o smtpd_tls_auth_only=no
        -o smtpd_tls_dh1024_param_file=${config_directory}/dh2048.pem
        -o smtpd_enforce_tls=no
        -o smtpd_tls_security_level=may
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject

(这种配置在生产中使用是不安全的,但我试图尽可能地消除复杂性)

127.0.0.1:9830是队列前的内容过滤服务器,我使用127.0.0.1:9821该文件的第二个配置将 Postfix 配置为监听返回的邮件。

以下是我使用过滤器发回 Postfix 的内容:

EHLO localhost
AUTH PLAIN {token}
XFORWARD HELO={client_name} NAME={client_name} ADDR={client_addr} PROTO=SMTP
XFORWARD IDENT={message_id}
MAIL FROM: {sender}
RCPT TO: {recipient}
DATA
...
.
QUIT

以下是过滤器日志的跟踪: 使用过滤器发送邮件时进行记录

以下是我在 Postfix 上看到的内容: proxy-reject :队列文件写入错误

当过滤器发送命令时,Postfix 已检测到所有命令,但data=0/1原始入站邮件的响应表明尚未收到数据。事实上,错误似乎是在进程submission尝试将代理内容添加到队列时发生的。

我希望我已经解释清楚了一切,因为我真的需要一些帮助......

相关内容