我一直在使用 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
尝试将代理内容添加到队列时发生的。
我希望我已经解释清楚了一切,因为我真的需要一些帮助......