Exim

Exim4:外發電子郵件的垃圾郵件檢查後的本地遞送

  • March 18, 2017

domain.com並且domain.net託管在同一台伺服器上server1。為避免垃圾郵件和病毒,所有外發電子郵件(甚至是本地域)都需要使用 3rd 方服務進行掃描。mail@domain.com因此,來自to的電子郵件mail@domain.net應該離開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 名稱檢測垃圾郵件過濾器:

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

引用自:https://serverfault.com/questions/839001