我已经设置了 postfix,这样来自 smtpd 的邮件就会自动通过 spamassassin 进行过滤(它会将邮件重新注入到邮件队列中并添加标题)
现在我想对被视为垃圾邮件的邮件做两件事:
- 如果邮件再次发出(因为别名),则立即丢弃该邮件
- 如果邮件是发给本地虚拟用户的,则会将其交给 Dovecot,然后放入垃圾邮件文件夹。
我可以这样配置 postfix 吗?我的所有别名和用户信息都在 MySQL 中。目前我丢弃所有垃圾邮件(在 main.cf 中使用 header_checks),但我更喜欢上述情况。
答案1
您可以在 master.cf 中设置另一个 smtp 侦听器进程来处理外发邮件。类似下面的内容应该可以让您开始侦听端口 26:
26 inet n - n - 18 smtpd -o header_checks=[your checks] mydestination= relayhost=
您可能需要稍微调整一下,以禁用本地投递,并且不接受来自除本地主机之外任何地方的邮件。然后您需要将以下内容添加到您的 main.cf
relayhost=127.0.0.1:26
当然,把标头检查从该文件中删除。
邮件将被转发到 26 上的第二个 smtpd 进程,然后该进程将丢弃失败的垃圾邮件。如果您需要将邮件传递到下游服务器而不是直接投递,您还可以在该侦听器中指定中继主机。
然后,您就可以按照之前建议的方式,使用 Dovecot 为本地用户设置其余的过滤功能。
当然,在执行此操作时,你需要考虑为邮件添加多少个邮件跳转,因为某些邮件提供商会丢弃跳转次数相当多的邮件(例如,gmail 在 10 或 15 次之后就会丢弃邮件)