URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 88708
[ Назад ]

Исходное сообщение
"Exim+SpamAssassin: Перенос письма в папку СПАМ"

Отправлено dimmonspb , 13-Апр-10 18:32 
Есть рабочая система Exim+SpamAssassin, которая проверяет письма и в письмах, которые она определяет как спам, в заголовок дописывается: *****SPAM*****

Действие это прописано в файле local.cf SpamAssassin`a:
rewrite_header Subject *****SPAM*****


В конфигурационном файле EXIM`a стоит метод доставки mysql_delivery
------------------------------------
mysql_delivery:
    driver = appendfile
    check_string = ""
    create_directory
    delivery_date_add
    directory = ${lookup mysql{SELECT CONCAT('/usr/spool', 'maildir') \ FROM 'mailbox' WHERE 'username'='${local_part}@${domain}'}}
    directory_mode = 770
    envelope_to_add
    group = mail
    maildir_format
    maildir_tag = ,S=$message_size
message_prefix = ""
    message_suffix = ""
    mode = 0600

---------------------------------------
Предположим, что домен: abc.ru и почта пользователя test@abc.ru

В итоге полученная почта сохраняется в:
/usr/spool/abc.ru/test@abc.ru/cur

А почта которая перенесена в спам через web-интерфейс помещается в:
/usr/spool/abc.ru/test@abc.ru/.Junk/cur

Как в конфиг EXIM`a дописать чтобы письмо с темой *****SPAM***** переносилось в папку СПАМ автоматически?


Содержание

Сообщения в этом обсуждении
"Exim+SpamAssassin: Перенос письма в папку СПАМ"
Отправлено dimmonspb , 14-Апр-10 16:06 
Ну подскажите решение проблемы! Очень надо!

"Exim+SpamAssassin: Перенос письма в папку СПАМ"
Отправлено Виталий , 15-Апр-10 08:35 
>Ну подскажите решение проблемы! Очень надо!

sieve?


"Exim+SpamAssassin: Перенос письма в папку СПАМ"
Отправлено den , 15-Апр-10 10:47 
>>Ну подскажите решение проблемы! Очень надо!
>
>sieve?

можно исрользуя system_filter

if not first_delivery
then
    finish
endif

if  $h_X-Spam-Status: CONTAINS "Yes"
       or      
    $h_X-Spam-Flag: CONTAINS "Yes"
then
    if foranyaddress $recipients ($thisaddress contains "@domen.com")
    then
        save /var/vmail/domen.com/spam/Maildir/
        seen finish
    endif
endif


"Exim+SpamAssassin: Перенос письма в папку СПАМ"
Отправлено DeadLoco , 15-Апр-10 11:13 
>>>Ну подскажите решение проблемы! Очень надо!
>>
>>sieve?
>
>можно исрользуя system_filter

Можно, но если для РОР/ІМАР используется dovecot, то логично использовать его для LDA - тогда появится возможность sieve/managesieve


"Exim+SpamAssassin: Перенос письма в папку СПАМ"
Отправлено dimmonspb , 15-Апр-10 18:44 
>>>>Ну подскажите решение проблемы! Очень надо!
>>>
>>>sieve?
>>
>>можно исрользуя system_filter
>
>Можно, но если для РОР/ІМАР используется dovecot, то логично использовать его для
>LDA - тогда появится возможность sieve/managesieve

Почитав про Sieve понял, что нужно написать отдельный скрипт примерно такого вида:
require "fileinto";
if header :contains ["subject"] ["*****SPAM*****"] {
                fileinto "INBOX.Junk";}


Но вот куда его добавить чтобы он заработал я вообще не понимаю. Объясните пожалуйста...


"Exim+SpamAssassin: Перенос письма в папку СПАМ"
Отправлено DeadLoco , 15-Апр-10 19:47 
>Почитав про Sieve понял, что нужно написать отдельный скрипт примерно такого вида:
>
>require "fileinto";
>if header :contains ["subject"] ["*****SPAM*****"] {
>            
>    fileinto "INBOX.Junk";}
>
>
>Но вот куда его добавить чтобы он заработал я вообще не понимаю.
>Объясните пожалуйста...

Довекот имеет дефолтное сито, которое применяется при вызове ЛДА. В конфиге это выглядит так:

protocol lda {
  ....
  mail_plugins = quota sieve
  mail_plugin_dir = /usr/local/lib/dovecot/lda
  sieve_global_path = /usr/local/etc/dovecot/spam.sieve  // - вот это путь к глобальному ситу
  ....
}

Имейте в виду, что при обращении ЛДА к ситу, оно компилируется в байт-код,  в файл с именем spam.svbin - поэтому на папку /usr/local/etc/dovecot/ должны быть установлены права, разрешающие ЛДА туда писать.

Из-за того, что существуют пользовательские сита, нужно добавить строки в раздел плагинов:

plugin {
  ....
  sieve_global_path = /usr/local/etc/dovecot/spam.sieve
  sieve_global_dir = /usr/local/etc/dovecot
  sieve_dir = /var/mail/%n
  sieve = /var/mail/%n/.dovecot.sieve
  ....
}

Я пока в процессе выяснения, как заставить довекот-ЛДА отрабатывать ОБА сита - и глобальное, и пользовательское. Сейчас у меня ЛДА если обнаруживает пользовательское сито, сформированное через managesieve, то выполняет ТОЛЬКО его. А если не обнаруживает - то глобальное. В глобальном у меня прописано только перенос письма с моим хедером в пользовательскую папку "Спам":

/usr/local/etc/dovecot/spam.sieve
--------8<---------------------
require "fileinto";
if exists "X-Spam-Ooops"
{
fileinto "Junk";
}
--------8<---------------------

Пользователи, строящие свой сортировщик писем, уведомлены о необходимости добавить вручную правило выноса спама по хедеру в соотв. папку.


"Exim+SpamAssassin: Перенос письма в папку СПАМ"
Отправлено DeadLoco , 15-Апр-10 19:52 
Ага, еще забыл сказать, что в конфиге экзима у меня определен транспорт вот так:

dovecot_lda:
        driver          = pipe
        command         = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
        message_prefix  =
        message_suffix  =
        delivery_date_add
        log_output
        user            = mailnull


В роутере, который приводит к локальной доставке, просто указываем этот транспорт:

local_user:
        driver          = accept
        condition       = блаблабла
        transport       = dovecot_lda
        .....