告诉 Postfix 在 SpamAssassin 未运行时不要投递邮件

告诉 Postfix 在 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}

postsuper -h ALL我找到了使用暂停传送的参考资料,但这似乎只能保留当前在 Postfix 队列中的邮件。在我发出后收到的新邮件postsuper -h ALL仍可正常传送。

答案1

这不是 Postfix 错误,而是 spamc 的不良行为。截至 spamc文档(参见退出代码)出现错误时不会产生退出代码。而缺失的 spamd 是一个错误(在我看来)。

而且由于 Postfix管道文档 Postfix 将把退出代码 0 视为成功传送。

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

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

相关内容