domain.com
并且domain.net
托管在同一台服务器上server1
。为避免垃圾邮件和病毒,所有外发电子邮件(甚至是本地域)都需要使用 3rd 方服务进行扫描。[email protected]
因此,来自to的电子邮件[email protected]
应该离开server1
,然后将在 外部进行检查server1
,然后根据其 MX 记录将其传递到server1
,它来自于。
在这里,我们以一个循环结束:Too many "Received" headers - suspected mail loop
.
这就是我所拥有的:
smarthost_relay:
driver = manualroute
ignore_target_hosts = 127.0.0.0/8
condition = ${if !inlist{$sender_host_address}{<; 46.xxx.xxx.xxx }}
condition = ${if or {{!eq{$sender_address}{}} {!eq{$sender_host_address}{}}}}
condition = '${perl{check_limits}}'
transport = auth_relay
route_list = $domain 46.xxx.xxx.xxx::587
same_domain_copy_routing = yes
no_more
正如我预期的那样,这里$sender_host_address
不起作用。因为在远程检查后电子邮件到达时它是空的。我想念什么?如何实现它?
问候,亚历克斯。
您可能希望在消息处理期间在 ACL 中设置 ACL 变量,以指示该消息是从垃圾邮件过滤器接收的。有几个通常未定义的 ACL 可用于此目的。类似这样的 ACL 块应该通过 IP 或 DNS 名称检测垃圾邮件过滤器:
然后对传输中的变量进行简单检查。
一旦您知道它正在工作,您就可以从 ACL 中删除 log_write。
为此,您需要确保您没有使用 TURN 或 ETRN 在用于发送垃圾邮件过滤邮件的连接上接收回邮件。
如果您想尝试修改您的条件,您可能需要查看 match_ip 运算符而不是 in_list。
要过滤掉同一域内路由的消息,请尝试使用以下路由器条件:
我在
acl_check_mail:
condition = ${if eq {$acl_m_filtered}{0}{yes}{no}}
并在我的路由器中使用检查。到目前为止没有循环;)