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

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
orfan
рядовой
Сообщения: 37
Зарегистрирован: 2008-08-28 8:25:03

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

Непрочитанное сообщение orfan » 2010-12-28 14:36:21

Здраствуйте.
В конфигурационном файле е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?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

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

Непрочитанное сообщение blade_007 » 2010-12-28 20:46:51

Можно попробовать так

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

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 = ""

orfan
рядовой
Сообщения: 37
Зарегистрирован: 2008-08-28 8:25:03

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

Непрочитанное сообщение orfan » 2010-12-29 15:16:06

Есть в конфигурационном файле 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
Спасибо.

blade_007
ст. прапорщик
Сообщения: 571
Зарегистрирован: 2010-03-12 12:59:08
Контактная информация:

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

Непрочитанное сообщение blade_007 » 2010-12-29 15:53:24

>>Скажите корректна ли будет следующая запись для опции 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

orfan
рядовой
Сообщения: 37
Зарегистрирован: 2008-08-28 8:25:03

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

Непрочитанное сообщение orfan » 2010-12-29 17:45:35

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
Еще раз спасибо!

orfan
рядовой
Сообщения: 37
Зарегистрирован: 2008-08-28 8:25:03

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

Непрочитанное сообщение orfan » 2011-01-11 22:44:29

Хотел уточнить.
Опция 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

sorrel
рядовой
Сообщения: 15
Зарегистрирован: 2010-08-15 20:34:44
Откуда: Украина, Симферополь
Контактная информация:

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

Непрочитанное сообщение sorrel » 2011-01-19 14:09:50

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

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

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

Аватара пользователя
xM
ст. лейтенант
Сообщения: 1316
Зарегистрирован: 2009-01-15 23:57:41
Откуда: Königsberg
Контактная информация:

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

Непрочитанное сообщение xM » 2011-01-20 16:55:45

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.
IT voodoo blog https://kostikov.co