Exim
Exim4:外發電子郵件的垃圾郵件檢查後的本地遞送
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