Есть рабочая система 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***** переносилось в папку СПАМ автоматически?
Ну подскажите решение проблемы! Очень надо!
>Ну подскажите решение проблемы! Очень надо!sieve?
>>Ну подскажите решение проблемы! Очень надо!
>
>sieve?можно исрользуя system_filter
if not first_delivery
then
finish
endifif $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
>>>Ну подскажите решение проблемы! Очень надо!
>>
>>sieve?
>
>можно исрользуя system_filterМожно, но если для РОР/ІМАР используется dovecot, то логично использовать его для LDA - тогда появится возможность sieve/managesieve
>>>>Ну подскажите решение проблемы! Очень надо!
>>>
>>>sieve?
>>
>>можно исрользуя system_filter
>
>Можно, но если для РОР/ІМАР используется dovecot, то логично использовать его для
>LDA - тогда появится возможность sieve/managesieveПочитав про Sieve понял, что нужно написать отдельный скрипт примерно такого вида:
require "fileinto";
if header :contains ["subject"] ["*****SPAM*****"] {
fileinto "INBOX.Junk";}
Но вот куда его добавить чтобы он заработал я вообще не понимаю. Объясните пожалуйста...
>Почитав про 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<---------------------Пользователи, строящие свой сортировщик писем, уведомлены о необходимости добавить вручную правило выноса спама по хедеру в соотв. папку.
Ага, еще забыл сказать, что в конфиге экзима у меня определен транспорт вот так: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
.....