
我安裝並運行了 exim 和 spamassassin (由 exiscan 使用),但我想添加自訂規則,如果“to”和“envelope-to”不相同,該規則將為電子郵件添加一些點。我為 local.cf 添加了以下規則:
header EXIM_SENDER_SWAP X-Sender-Swap =~ /To_envelope-to/
describe EXIM_SENDER_SWAP To doesnt match envelope-to
score EXIM_SENDER_SWAP 2.0
和 exim.conf 中的行
acl_check_data:
warn message = X-Subject-Swap: To_envelope-to
condition = ${if !match {${lc:$h_envelope-to:}}{${lc:$h_to:}}{yes}{no}}
我正在發送測試訊息,並且 exim 添加了相應的標頭,但 spamassassin 沒有添加任何附加點。怎麼了?
答案1
首先,「message」修飾符不是您想要的,而是當您想要在 ACL 中的訊息中新增標頭時,您需要使用「add_header」。讀http://www.exim.org/exim-html-current/doc/html/spec_html/ch42.html#SECTaddheadacl如果您需要有關該部分的更多資訊。
但是,我認為您嘗試做的事情不會以您正在使用的方式起作用。在 exim 的內部,當它處理每個 ACL 時,ACL 就會執行,然後當 ACL 完成時完全的,所有標頭新增和刪除均已完成。您在相同資料 ACL 中執行這兩項操作,這表示第一次比較新增的標頭尚未實際新增至 spam 指令正在掃描的暫存檔案中的郵件。
一種選擇是進行垃圾郵件掃描,檢測要添加標頭的條件,然後在比較時將該分數添加到保存垃圾郵件分數的變數中,以查看是否為垃圾郵件。
第二個選擇,也是我認為更好的選擇,是使用兩個不同的使用者來執行垃圾郵件掃描。例如,您將垃圾郵件分數設定為 5.0。對於第二個,您將垃圾郵件分數設定為 3.0。這比正常限制少了 2 分,相當於垃圾郵件分數增加了 2 分。
那麼你的 ACL 節可能看起來像是(未經測試):
warn condition = ${if !match {${lc:$h_envelope-to:}}{${lc:$h_to:}}{yes}{no}}
set $acl_m_env_ok = 1
spam = strict_user:true
warn condtion = ${if eq{$acl_m_env_ok}{1} {no}{yes}}
spam = normal_user:true
warn add_header = X-Spam-Score: $spam_score
add_header = X-Spam-Report: $spam_report
deny condition = ${if eq{$acl_m_env_ok}{1}}
condition = ${if >{$spam_score_int}{30}}
message = This message with mismatched header/envelope score $spam_score_points...REJECTED
deny condition = ${if >{$spam_score_int}{50}}
message = This message scored $spam_score points...REJECTED