我想将传入的邮件传递virtual_transport
给传输spamassassin
(main.cf:)virtual_transport=spamassassin
,然后使用 sendmail 将扫描的邮件重新注入到 postfix 中。
运输看起来像这样:
spamassassin unix - n n - - pipe
flags=hu user=vmail:mail argv=/usr/bin/spamc -u ${recipient} -e /usr/sbin/sendmail -f ${sender} ${recipient}
根据后缀文档,这应该是可能的:
大容量站点应避免使用通过 Postfix sendmail(1) 和 postdrop(1) 重新注入扫描邮件的“简单”内容过滤器。
在我当前的 sendmail 调用/usr/sbin/sendmail -f ${sender} ${recipient}
中,邮件循环传递回队列,然后返回到 spamassassin 等等。
根据我对 postfix 文档的理解,使用 postfix 传递的邮件sendmail
被放入maildrop
目录中,然后使用pickup
. 我试图将 a 添加-o virtual_transport=dovecot
到接送运输以避免排队,但这没有帮助。(我想这些选项只能附加到 smtp 传输中)。
如何将使用 spamassassin 扫描的邮件重新注入队列以进行最终传递,而不会导致循环?
不,你不能
解释
我了解您使用
virtual_transport
管道将电子邮件发送到 Spam Assassin 的原因。您只想扫描发送给您的电子邮件virtual_mailbox_domain
。不幸的是,它不遵循使用参数的简单内容过滤器的推荐 设置。content_filter
virtual_transport
为什么我不能通过
virtual_transport
pickup或smtpd?通常,这里是跨后缀代码的电子邮件之旅
在
cleanup
守护进程中,postfix 将“路由”您的电子邮件,无论它们属于虚拟、本地、smtp 还是其他传输方式。一个例外是当非空白content_filter
参数被传递到输入服务 (smtpd
,pickup
,qmqpd
) 时。发生这种情况时,postfix 将覆盖消息路由并将电子邮件发送到其中content_filter
。另请注意,默认情况下,所有后缀服务都是从中获取参数值的,
main.cf
除非您使用-o parameter=value on覆盖它master.cf
。但并非man 5 postconf
服务使用的每个参数。例如,content_filter仅由 使用pickup
,smtpd
因此qmqpd
您可以将-o content_filter=amavis:[127.0.0.1:10025放在它们上面。再比如,把-o smtp_bind_address放进去是不明智的,smtpd
因为这个参数只在smtp
服务中使用。相同的论点可以应用于您的问题,“为什么我可以通过-o virtual_transport in
pickup
?”所以这里有几个可供您选择的设置
content_filter
按照后缀文档中的说明使用。缺点是您还会扫描在您的域外中继的电子邮件。通过
content_filter
ACCESS 表和 FILTER 操作使用。通过这种方式,您可以有选择地扫描传入的电子邮件。不幸的是,您必须.virtual domain
再次在该表中登记。permit_mynetworks
您可以通过在、之后小心放置 ACCESS 表来避免它permit_sasl_authenticated
。通过这种方式,外发电子邮件将已被允许,并且您只扫描传入的电子邮件。(归功于OP评论:))使用后缀多实例。通过这种方式,您可以保留
virtual_transport
参数,并且 spamc 会将电子邮件注入您的第二个实例。然后你可以virtual_transport
在不同的实例中定义不同的。但是,如果您想保持设置简单,那就有点过分了。