[exim-conf] exiscan: get X-Spam-Satus

Nikolai V. Ivanyushin nvi на sven.ru
Вс Янв 22 21:55:09 EET 2006


Монстр!
Что же касается твоего вопроса в конце
 > есть у кого-то конструктивные идеи на эту тему или мысли о том, какой
 > из вариантов более приемлем?
первый вариант выглядит убедительней.
Но лично я, за тот вариант, который без патченья. ;-) Или с патчем, 
который будет засунут в мейнстрим.


Victor Ustugov пишет:
> приветствую
> 
> захотелось мне добраться до значения параметра autolearn поля 
> X-Spam-Status в системном фильтре эксима. но я обнаружил, что 
> информация, доступная в поле X-Spam-Status после проверки письма с 
> помощью spamc или spamassassin, недоступна в exim/exisan
> 
> exim/exiscan отдает демону spamd команду REPORT примерно так:
> 
> 
> ( \
> echo -e -n "REPORT SPAMC/1.2\r\n" ; \
> echo -e -n "User: root\r\n" ; \
> echo -e -n "Content-length: 82\r\n\r\n" ; \
> echo -e -n "From: Vasya Pupkin <vasya на pupkin.org.ua>\r\n" ; \
> echo -e -n "To: Vasya Pupkin <vasya на pupkin.org.ua>\r\n" \
> ) | nc localhost 783
> 
> 
> результат получается примерно такой:
> 
> 
> SPAMD/1.1 0 EX_OK
> Spam: True ; 7.2 / 5.0
> 
> Content analysis details:   (7.2 points, 5.0 required)
> 
>   pts    rule name              description
> ------ ---------------------- 
> --------------------------------------------------
>   2.0 MESSAGE_ID_MISSED      Message-Id is missed
> -0.0 NO_RELAYS              Informational: message was not relayed via SMTP
>   2.5 MISSING_HB_SEP         Missing blank line between message header 
> and body
> -1.4 BAYES_20               BODY: Bayesian spam probability is 5 to 20%
>                              [score: 0.1601]
>   1.8 MISSING_SUBJECT        Missing Subject: header
>   2.3 EMPTY_MESSAGE          Message appears to be empty with no 
> Subject: text
> -0.0 NO_RECEIVED            Informational: message has no Received headers
> 
> 
> шаблон для построения этого результата описан в 
> http://mta.org.ua/spamassassin/rules.corvax/99_report_headers-0.01.cf:
> 
> 
> report Content analysis details:   (_HITS_ points, _REQD_ required)
> report
> report " pts    rule name              description"
> report  ------ ---------------------- 
> --------------------------------------------------
> report _SUMMARY_
> 
> 
> это почти дефолтовый вид отчета, просто немного обкусанный.
> 
> никаких упоминаний об autolearn тут нет.
> 
> если же взглянуть на механизм работы spamc, то можно увидеть, что он 
> отдаем демону spamd команду PROCESS примерно так:
> 
> 
> ( \
> echo -e -n "PROCESS SPAMC/1.2\r\n" ; \
> echo -e -n "User: root\r\n" ; \
> echo -e -n "Content-length: 82\r\n\r\n" ; \
> echo -e -n "From: Vasya Pupkin <vasya на pupkin.org.ua>\r\n" ; \
> echo -e -n "To: Vasya Pupkin <vasya на pupkin.org.ua>\r\n" \
> ) | nc localhost 783
> 
> 
> вот типичный результат:
> 
> 
> SPAMD/1.1 0 EX_OK
> Content-length: 1031
> 
> X-Spam-Level: *******
> X-Spam-Status: Yes, score=7.2 required=5.0 tests=BAYES_20,EMPTY_MESSAGE,
>          MESSAGE_ID_MISSED,MISSING_HB_SEP,MISSING_SUBJECT,NO_RECEIVED,
>          NO_RELAYS autolearn=no version=3.1.0
> X-Spam-Report: Content analysis details: (7.2 points, 5.0 required)
>          pts    rule name              description
>          ------ ---------------------- 
> --------------------------------------------------
>          *  2.0 MESSAGE_ID_MISSED Message-Id is missed
>          * -0.0 NO_RELAYS Informational: message was not relayed via SMTP
>          *  2.5 MISSING_HB_SEP Missing blank line between message header 
> and body
>          * -1.4 BAYES_20 BODY: Bayesian spam probability is 5 to 20%
>          *      [score: 0.1601]
>          *  1.8 MISSING_SUBJECT Missing Subject: header
>          *  2.3 EMPTY_MESSAGE Message appears to be empty with no 
> Subject: text
>          * -0.0 NO_RECEIVED Informational: message has no Received headers
> X-Spam-Flag: YES
> X-Spam-Checker-Version: SpamAssassin 3.1.0 (2005-09-13) on
>          gobblin.corvax.kiev.ua
> From: Vasya Pupkin <vasya на pupkin.org.ua>
> To: Vasya Pupkin <vasya на pupkin.org.ua>
> 
> 
> т. е. spamd возвращает полностью письмо с уже добавленными служебными 
> заголовками X-Spam-*.
> 
> заголовок X-Spam-Report в данном случае строится по шаблону, описанному 
> в http://mta.org.ua/spamassassin/rules.corvax/99_report_headers-0.01.cf 
> как "add_header all Report"
> 
> дефолтовый шаблон для поля X-Spam-Status следующий:
> 
> 
> add_header all Status "_YESNO_, score=_SCORE_ required=_REQD_ 
> tests=_TESTS_ autolearn=_AUTOLEARN_ version=_VERSION_"
> 
> 
> spamassassin формирует заголовки для проверенного пиьма таким же 
> образом, как и spamc.
> 
> это можно проверить командами:
> 
> ( \
> echo -e -n "From: Vasya Pupkin <vasya на pupkin.org.ua>\r\n" ; \
> echo -e -n "To: Vasya Pupkin <vasya на pupkin.org.ua>\r\n" \
> ) | spamc -d localhost -p 783
> 
> ( \
> echo -e -n "From: Vasya Pupkin <vasya на pupkin.org.ua>\r\n" ; \
> echo -e -n "To: Vasya Pupkin <vasya на pupkin.org.ua>\r\n" \
> ) | spamassassin
> 
> 
> результат будет таким же, как при записи непосредственно в сокет команды 
> PROCESS
> 
> 
> а теперь вопрос: так как же проще всего добраться до значения autolearn 
> из exim/exiscan? т. е. до того значения, которое в шаблонах указано как 
> _AUTOLEARN_.
> 
> есть как минимум два варианта:
> 
> 1. продолжать использовать команду REPORT в диалоге exiscan и spamd. при 
> этом надо в шаблон report'а внести _AUTOLEARN_.
> при этом придется патчить exiscan на предмет парсинга результатов 
> report'а. мало того, при этом надо учитывать, что в настройках 
> spamassassin'а может быть как дефолтовое значение шаблона отчета, так и 
> содержащее _AUTOLEARN_
> 
> 2. пропатчить exiscan на предмет использования команды PROCESS в диалоге 
> со spamd. при этом придется все равно рихтовать обработку результатов 
> проверки в самом exiscan'е, мало того, при этом spamd будет в сокет 
> писать все тело письма.
> 
> 
> можно, правда, использовать первый вариант, но сделать его более 
> универсальным. а именно:
> 
> 1. модифицировать шаблон отчета для команды REPORT таким образом:
> 
> 
> report Content analysis details:   (_HITS_ points, _REQD_ required)
> report
> report " pts    rule name              description"
> report  ------ ---------------------- 
> --------------------------------------------------
> report _SUMMARY_
> X-Spam-Status: _YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ 
> autolearn=_AUTOLEARN_ version=_VERSION_
> 
> 
> 2. ответ демона в этом случае будет выглядеть так:
> 
> 
> SPAMD/1.1 0 EX_OK
> Spam: True ; 7.2 / 5.0
> 
> Content analysis details:   (7.2 points, 5.0 required)
> 
>   pts    rule name              description
> ------ ---------------------- 
> --------------------------------------------------
>   2.0 MESSAGE_ID_MISSED      Message-Id is missed
> -0.0 NO_RELAYS              Informational: message was not relayed via SMTP
>   2.5 MISSING_HB_SEP         Missing blank line between message header 
> and body
> -1.4 BAYES_20               BODY: Bayesian spam probability is 5 to 20%
>                              [score: 0.1601]
>   2.3 EMPTY_MESSAGE          Message appears to be empty with no 
> Subject: text
> -0.0 NO_RECEIVED            Informational: message has no Received headers
>   1.8 MISSING_SUBJECT        Missing Subject: header
> 
> X-Spam-Status: Yes, score=7.2 required=5.0 
> tests=BAYES_20,EMPTY_MESSAGE,MESSAGE_ID_MISSED,MISSING_HB_SEP,MISSING_SUBJECT,NO_RECEIVED,NO_RELAYS 
> autolearn=no version=3.1.0
> 
> 
> 3. пропатчить exiscan для поиска в ответе демона подстроки, начинающейся 
> с "X-Spam-Status:" и заполнять на основе ее значения переменную 
> spam_status, потом сделать ее доступной в exiscan'е на равне с 
> $spam_report, $spam_score, $spam_score_int, $spam_bar
> 
> 4. при парсинге ответа от демона учитывать, что X-Spam-Report там может 
> и не быть
> 
> 
> есть у кого-то конструктивные идеи на эту тему или мысли о том, какой из 
> вариантов более приемлем?
> 


-- 
SY
Nikolai






Подробная информация о списке рассылки exim-conf