У меня установлены и запущены 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. В чем дело?
Во-первых, модификатор «message» - это не то, что вам нужно, вместо этого вы хотите использовать «add_header», когда хотите добавить заголовок к сообщению в ACL. Читать http://www.exim.org/exim-html-current/doc/html/spec_html/ch42.html#SECTaddheadacl если вам нужна дополнительная информация по этой части.
Однако я не думаю, что то, что вы пытаетесь сделать, будет работать так, как вы используете. Внутри eximʻa, когда он обрабатывает каждый ACL, запускается ACL, затем, когда ACL имеет завершено, все добавления и удаления заголовка выполнены. Оба эти действия выполняются в одном ACL DATA ACL, что означает, что заголовки, добавленные при первом сравнении, еще не были добавлены к сообщению во временных файлах, которые сканирует команда спама.
Один из вариантов - выполнить сканирование на спам, определить условие, при котором вы должны были бы добавить заголовок, а затем добавить эту оценку к переменной, которая содержит оценку спама при сравнении, чтобы увидеть, является ли это спамом.
Второй вариант, на мой взгляд, лучший, - это иметь двух разных пользователей, которых вы используете для сканирования спама. Для одного у вас установлен рейтинг спама (например) 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