Пользовательское правило Exim и spamassassin

Пользовательское правило Exim и spamassassin

У меня установлены и запущены 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" — это не то, что вам нужно, вместо этого вы хотите использовать "add_header", когда хотите добавить заголовок к сообщению в ACL. Читатьhttp://www.exim.org/exim-html-current/doc/html/spec_html/ch42.html#SECTaddheadaclесли вам нужна дополнительная информация по этому вопросу.

Однако я не думаю, что то, что вы пытаетесь сделать, будет работать так, как вы используете. В недрах exim, когда он обрабатывает каждый ACL, ACL запускается, затем, когда ACLзавершенный, все добавления и удаления заголовков выполнены. Вы делаете оба этих действия в одном и том же DATA 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

Связанный контент