当 SpamAssassin 未运行时告诉 Postfix 不要发送邮件

Ben*_*ams 3 postfix spam spamassassin

我已将 Postfix 配置为使用 SpamAssassin spamd 守护进程过滤邮件。我最近注意到一些垃圾邮件会发送到我的收件箱,但没有添加 SpamAssassin 标头。我发现这一点是因为我每天都有一个 cron 作业来更新 SpamAssassin 并sa-update重新启动 spamd。当 Postfix 在 spamd 恰好重新启动时收到邮件时,它会在不进行过滤的情况下传递该邮件。

我的解决方案是更改 cron 作业,在重新启动 spamd 之前停止 Postfix,然后重新启动。这是最好的解决方案吗?我可以以某种方式告诉 Postfix 暂停所有投递吗?我可以更改对 spamd 的调用,使其阻塞直到 spamd 返回吗?

这是我的 SpamAssassin 行/etc/postfix/master.cf

spamassassin unix  -       n       n       -       -       pipe user=nobody argv=/usr/bin/spamc -u ${user} -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Run Code Online (Sandbox Code Playgroud)

postsuper -h ALL我找到了使用搁置传递的参考,但这似乎只保留当前在 Postfix 队列中的消息。我发出后收到的新消息postsuper -h ALL仍然正常发送。

mai*_*ilq 5

这不是 Postfix 错误,而是不良的垃圾邮件行为。截至 spamc文档(请参阅退出代码),出现错误时不会生成退出代码。缺少的垃圾邮件是一个错误(在我看来)。

并且由于 Postfix管道文档,Postfix 会将退出代码 0 视为成功交付。

因此,您应该(如 spamc 文档中所述)-x在管道调用中设置一个标志。然后 Postfix 将邮件排队以供稍后投递(如果 spamd 再次准备好则进行稍后扫描)。

无需暂停或停止 Postfix。只是配置问题。