Страница 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.