Exim4:发送邮件经过垃圾邮件检查后进行本地投递

Exim4:发送邮件经过垃圾邮件检查后进行本地投递

domain.comdomain.net托管在同一台服务器上server1。为避免垃圾邮件和病毒,所有外发电子邮件(甚至发送到本地域的电子邮件)都需使用第三方服务进行扫描。因此,从[email protected]到 的电子邮件[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没有像我预期的那样工作。因为远程检查后收到电子邮件时它是空的。我错过了什么?如何实现它?

问候,亚历克斯。

答案1

您可能希望在邮件处理期间在 ACL 中设置 ACL 变量,以指示该邮件是从 SPAM 过滤器收到的。有多个通常未定义的 ACL 可用于此目的。类似这样的 ACL 块应通过 IP 或 DNS 名称检测垃圾邮件过滤器:

warn
  hosts = 46.xxx.xxx.xxx : spamfilter.example.com
  set acl_c9 = SPAMFiltered
  logwrite = Received from SPAM Filter server

然后使用传输中的变量进行简单检查。

 condition = ${if eq {$acl_c9}{}}

一旦您知道它正在运行,您就可以从 ACL 中删除 log_write。

为了使其正常工作,您需要确保您没有使用 TURN 或 ETRN 在用于发送垃圾邮件过滤消息​​的连接上接收邮件。

如果您想尝试修改您的条件,您可能需要查看 match_ip 运算符而不是 in_list。

要过滤掉同一域内路由的消息,请尝试如下路由器条件:

domains = ! $sender_address_domain

答案2

我添加了以下几行acl_check_mail:

warn    hosts = ! 46.xxx.xxx.xxx
          set acl_m_filtered = 0
          add_header = X-Received-SPAM-Filtered: $acl_m_filtered

warn    hosts = 46.xxx.xxx.xxx
          set acl_m_filtered = 1
          add_header = X-Received-SPAM-Filtered: $acl_m_filtered

condition = ${if eq {$acl_m_filtered}{0}{yes}{no}}在我的路由器中检查。

到目前为止没有循环;)

相关内容