我正在尝试让 postfix 在软(4xx)和硬(5xx)传送错误上运行脚本,但我不确定从哪里开始。
如果我理解正确的话,我可以在 master.cf 文件中插入(基于管道的)过滤器,有一个完整的“milter”基础设施可用,最后我想我可以简单地通过 mail.info 日志进行 grep。
那么 - 有什么建议吗?我应该选择“通过 master.cf 处理”路线吗?如果是,我应该拦截哪个守护进程?“反弹”?grep-the-logs 路线可能是最简单的,但我不禁觉得有更好的方法。
任何建议都值得赞赏!
答案1
Postfix 是一个 MTA - 邮件传输代理。邮件的投递由内置 MDA(邮件投递代理)之一完成 - 本地(8)或虚拟(8) - 或由您配置的任何外部 MDA。
如果由于任何原因投递失败,则会记录此事实,并且该消息将被推迟以便稍后重试(4xx 状态),或被拒绝并且将退回消息发送回发件人(5xx 状态)。
上面的路径中没有任何可以任意地注入替代代码;这些操作是由 SMTP 协议 (RFC5321) 强制要求的。
你可以完全决定向 MDA 传递消息时会发生什么;你必须编程那以适合您的情况的任何方式处理错误状态。
编辑:也就是说,您可以围绕您选择的传送代理编写一个基于管道(8)的包装器来处理这些传送结果。