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