我将Postfixconfiguration为使用SpamAssassin spamd守护程序来过滤邮件。 我最近注意到,一些垃圾邮件将被传递到我的收件箱,没有添加SpamAssassin头。 我跟踪了这一事实,我有一个每日的cron作业,用sa-update更新SpamAssassin并重新启动spamd。 当垃圾邮件恰好在重新启动时,Postfix收到一封邮件时,邮件将不进行过滤。
我的解决scheme是在重新启动spamd之前更改cron作业来停止Postfix,然后重新启动它。 这是最好的解决scheme吗? 我能以某种方式告诉Postfix暂停所有交付? 我可以将呼叫改变为垃圾邮件,以便阻止垃圾邮件返回吗?
这是我的/etc/postfix/master.cf的SpamAssassin行:
spamassassin unix - nn - - pipe user=nobody argv=/usr/bin/spamc -u ${user} -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
我发现使用postsuper -h ALL引用来postsuper -h ALL传递,但是这似乎只能保留当前在Postfix队列中的消息。 发出postsuper -h ALL之后出现的postsuper -h ALL仍然正常传送。
这不是一个Postfix错误,而是一个糟糕的垃圾邮件行为。 从spamc 文档 (请参阅退出代码),出现错误时不会生成退出代码。 而缺less的垃圾邮件是一个错误(在我眼里)。
而且由于Postfix的pipe道文档,Postfix会把退出代码0视为成功发送。
所以你应该(正如在垃圾邮件文件中提到的)在pipe道调用中设置一个-x标志。 然后,Postfix对邮件进行排队,以便稍后传送(如果垃圾邮件再次准备好,则稍后进行扫描)。
没有必要暂停或停止Postfix。 只是一个configuration问题。