
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が完了、すべてのヘッダーの追加と削除が行われます。これら両方を同じ DATA ACL で実行しているため、最初の比較で追加されたヘッダーは、スパム コマンドがスキャンしている一時ファイル内のメッセージにはまだ実際には追加されていません。
1 つのオプションは、スパム スキャンを実行し、ヘッダーが追加された条件を検出し、比較時にスパム スコアを保持する変数にそのスコアを追加して、スパムかどうかを確認することです。
2 番目のオプション (私見ではこちらの方がよい) は、スパム スキャンを実行するために 2 人の異なるユーザーを使用することです。1 つ目のユーザーでは、スパム スコアを (たとえば) 5.0 に設定します。2 つ目のユーザーでは、スパム スコアを 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