Страница 1 из 1

Складывать спам в папку .../.Junk

Добавлено: 2010-12-28 14:36:21
orfan
Здраствуйте.
В конфигурационном файле еxim есть у меня такой router, который удаляет сообщения, удовлетворяющие условию condition

Код: Выделить всё

ditch_spam:
  driver = redirect
  allow_fail
  data = :blackhole:
  condition = ${if >{$spam_score_int}{${lookup mysql{select users.sa_refuse * 10 from users,domains \
                where localpart = '${quote_mysql:$local_part}' \
                and domain = '${quote_mysql:$domain}' \
                and users.on_spamassassin = '1' \
                and users.domain_id=domains.domain_id \
                and users.sa_refuse > 0 }{$value}fail}} {yes}{no}}
  retry_use_local_part
Только начал разбираться с EXIM, в процессе возник вопрос, который решил задать на форуме.
Можно ли заставить exim складывать (не удалять) спам в папку Junk пользователя (/var/spool/$domain/$user/Maildir/.Junk ), которому было предназначено сообщение? Если да, подскажите каким образом изменить существующий router ditch_spam.
Может ли это делать сам exim или для этого необходимо установить дополнительно LDA MailDrop?

Re: Складывать спам в папку .../.Junk

Добавлено: 2010-12-28 20:46:51
blade_007
Можно попробовать так

Код: Выделить всё

ditch_spam:
  driver = accept
  allow_fail
  condition = ${if >{$spam_score_int}{${lookup mysql{select users.sa_refuse * 10 from users,domains \
                where localpart = '${quote_mysql:$local_part}' \
                and domain = '${quote_mysql:$domain}' \
                and users.on_spamassassin = '1' \
                and users.domain_id=domains.domain_id \
                and users.sa_refuse > 0 }{$value}fail}} {yes}{no}}
  retry_use_local_part
 transport = ditch_transport
....

begin transports:
ditch_transport: 
        driver = appendfile 
        maildir_format 
        create_directory 
        maildir_tag = ,S=$message_size 
        directory = /var/spool/$domain/$user/Junk
        return_path_add 
        delivery_date_add 
        envelope_to_add 
        user = mailnull 
        group = mail 
        mode = 0600 
        no_mode_fail_narrower 
        check_string = "" 
        directory_mode = 700 
        message_prefix = "" 
        message_suffix = ""

Re: Складывать спам в папку .../.Junk

Добавлено: 2010-12-29 15:16:06
orfan
Есть в конфигурационном файле exim.conf у меня виртуальный транспорт, который доставляет сообщения для виртуальных доменов, там есть вот такая опция directory

Код: Выделить всё

directory = ${lookup mysql{select smtp from users,domains \
                where localpart = '${quote_mysql:$local_part}' \
                and domain = '${quote_mysql:$domain}' \
                and users.domain_id = domains.domain_id}}
Результатом поиска, если он будет успешен, будет строка вида /opt/mail/domain.ru/user/Maildir - в эту директорию и попадет сообщение.

Скажите корректна ли будет следующая запись для опции directory (добавиться /.Junk), которая будет использоваться в ditch_transport (см. выше)

Код: Выделить всё

directory = ${lookup mysql{select smtp from users,domains \
                where localpart = '${quote_mysql:$local_part}' \
                and domain = '${quote_mysql:$domain}' \
                and users.domain_id = domains.domain_id}}/.Junk
или запись для опции directory должна выглядеть по другому, например

Код: Выделить всё

 directory = /opt/spool/$domain/$local_part/Maildir/.Junk
Спасибо.

Re: Складывать спам в папку .../.Junk

Добавлено: 2010-12-29 15:53:24
blade_007
>>Скажите корректна ли будет следующая запись для опции directory (добавиться /.Junk), которая будет использоваться в ditch_transport

Запрос поменять на

Код: Выделить всё

directory = ${lookup mysql{select concat(smtp,"/.Junk") from users,domains \
                where localpart = '${quote_mysql:$local_part}' \
                and domain = '${quote_mysql:$domain}' \
                and users.domain_id = domains.domain_id}}
>>или запись для опции directory должна выглядеть по другому, например

Код: Выделить всё

 directory = /opt/spool/$domain/$local_part/Maildir/.Junk
Можно, если у ваших пользователей путь к home одинаков и различается только $local_part

Re: Складывать спам в папку .../.Junk

Добавлено: 2010-12-29 17:45:35
orfan
To blade_007 - огромное спасибо, без твоей помощи врядли смог бы быстро дойти до
...concat(smtp,"/.Junk")...
>> Можно, если у ваших пользователей путь к home одинаков и различается только $local_part

Почтовая программа обслуживает несколько доменов. Сообщения для обслуживаемых доменов складываются транспортом virtual_delivery в /opt/mail/$domain/$user. Поэтому различаться могут $local_part и $domain, но это как я понимаю не принципиально, все равно опция directory будет выглядеть следующим образом:

Код: Выделить всё

directory = /opt/spool/$domain/$local_part/Maildir/.Junk
Еще раз спасибо!

Re: Складывать спам в папку .../.Junk

Добавлено: 2011-01-11 22:44:29
orfan
Хотел уточнить.
Опция allow_fail для роутера accept не годится, поэтому роутер должен быть следующего вида

Код: Выделить всё

ditch_spam:
  driver = accept
  condition = ${if >{$spam_score_int}{${lookup mysql{select users.sa_refuse * 10 from users,domains \
                where localpart = '${quote_mysql:$local_part}' \
                and domain = '${quote_mysql:$domain}' \
                and users.on_spamassassin = '1' \
                and users.domain_id=domains.domain_id \
                and users.sa_refuse > 0 }{$value}fail}} {yes}{no}}
 retry_use_local_part
 transport = ditch_transport

Re: Складывать спам в папку .../.Junk

Добавлено: 2011-01-19 14:09:50
sorrel
Можно сделать проще, если используется dovecot и sieve то можно просто создать правило которое по значению хэдера будет закидывать спам в папку Junk, например создаем файлик default.sieve и в нем прописываем следующее:

Код: Выделить всё

require ["fileinto"];
if header :contains "X-DSPAM-Result" "Spam"
{
        fileinto "Junk";
        stop;
}
а в dovecot.conf добавить sieve_before= путь к файлику, в результате не нужно делать отдельные доставки в экзиме, естественно в плагинах lda надо включить и настроить sieve.

Re: Складывать спам в папку .../.Junk

Добавлено: 2011-01-20 16:55:45
xM
sorrel писал(а): а в dovecot.conf добавить sieve_before= путь к файлику, в результате не нужно делать отдельные доставки в экзиме, естественно в плагинах lda надо включить и настроить sieve.
Ага. А еще, на тот случай, если у юзера вообще правил нет, добавить то же в sieve_global_path ибо
A path to a global sieve script file, which gets executed ONLY if user's private Sieve script doesn't exist, e.g. /var/lib/dovecot/default.sieve. Be sure to pre-compile this script manually using the sievec command line tool, as explained below.