[exim-conf] доработки поддержки персональных карантинов

Victor Ustugov victor на corvax.kiev.ua
Чт Мар 8 20:29:36 EET 2012


Victor Ustugov wrote:

>> пришлось создать отдельный транспорт
>> delivery_to_virt_domain_personal_quarantine, который используется только
>> при указании PIPE в confDELIVERY_TO при необходимости доставить спамовое
>> письмо в персональный карантин.
> 
> данный транспорт не генерируется в configure, если значение
> confVIRT_MDIR_PIPE_PERSONAL_QUARANTINE будет пустое или этой переменной
> не будет существовать. сделано это для случаев, когда доставка писем
> производится средствами внешнего LDA, но принятие решения о доставке
> письма в персональный карантин принимает сам LDA.
> 
>> дополнительные варианты доставки писем в виртуальные мейлдиры с помощью
>> procmail и пользовательских фильтров exim'а игнорируется для спамовых
>> писем, предназначенных для доставки в персональные карантины.
> 
> сегодня данное игнорирование доставки спамовых писем с помощью procmail
> и пользовательских фильтров exim'а сделано опциональным на случай, если
> необходимо каким-либо специальным образом доставлять спамовые письма в
> персональные карантины с помощью этих procmail и персональных фильтров
> exim'а.
> 
> игнорирование доставки спамовых писем регламентируется двумя переменными:
> 
> dnl игнорирование доставки с помощью procmail писем, предназначенных
> dnl для доставки в персональный карантин
> define(`confVIRT_MDIR_PROCMAIL_IGNORE_PERSONAL_QUARANTINE', `YES')
> 
> dnl игнорирование доставки с помощью пользовательских фильтров exim
> dnl писем, предназначенных для доставки в персональный карантин
> define(`confVIRT_MDIR_FILTERS_IGNORE_PERSONAL_QUARANTINE', `YES')
> 
> значения обеих переменных по умолчанию равно YES, т. е. доставка
> спамовых писем дополнительными средствами доставки игнорируется

в продолжении темы работы с персональными карантинами реализована
доставка в персональные карантины писем, для которых в разных фильтрах
применяется значение quarantine

при доставке спамовых писем в персональные карантины обнаружилась
проблема работы автоответчиков, реализованных с использованием sieve.

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

спамовые письма можно отличить по полю X-Spam-Flag, в котором
присутствует подстрока YES.

письма, к которым применено действие quarantine, можно отличить по полю
X-Quarantined со значением YES. добавление этого поля реализовано в
системно фильтре.

ниже несколько примеров.

1. roundcube + managesieve plugin

при реализации автоответчика с помощью плагина managesieve для roundcube
нужно добавить пару условий - X-Quarantined не содержит YES и
X-Spam-Flag не содержит YES

содержимое sieve скрипта будет выглядеть примерно так:


require ["vacation"];
# rule:[автоответчик]
if allof (header :contains "To" "corvax на mx.org.ua", not header :contains
"X-Quarantined" "YES", not header :contains "X-Spam-Flag" "YES")
{
        vacation :subject "Автоответчик" text:
Меня сейчас нет на рабочем месте.
Я прочту Ваше сообщение как только смогу.
Спасибо за понимание.
.
;
}


2. roundcube + vacation plugin

последний vacation plugin, до которого удалось добраться, был версии 1.9.9

пришлось его немного допилить. вот патч:
http://mta.org.ua/roundcube/patches/vacation-1.9.9/patch-vacation-1.9.9-sieve.patch

содержимое sieve скрипта автоответчика будет выглядеть примерно так:


require ["fileinto", "reject", "vacation", "copy"];
# rule:[vacation]
if allof (header :contains "X-Spam-Flag" "YES") {
        keep;
} elsif allof (header :contains "X-Quarantined" "YES") {
        keep;
} elsif allof (header :contains [ "To", "Cc" ] "corvax на mx.org.ua") {
        vacation :subject "Автоответ" "Приветствую.
Меня сейчас нет на рабочем месте.
Я прочту Ваше сообщение как только смогу.
Спасибо за понимание.
";
        keep;
} else {
        keep;
}


3. написанный вручную sieve скрипт.

при написании sieve скрипта вручную можно доставить спамовые письма в
персональный карантин самостоятельно:


require ["fileinto", "vacation"];
if header :contains "X-Spam-Flag" "YES" {
        fileinto "Junk";
        stop;
}
if header :contains "X-Quarantined" "YES" {
        fileinto "Junk";
        stop;
}
# rule:[автоответчик]
vacation :subject "Автоответчик" text:
Меня сейчас нет на рабочем месте.
Я прочту Ваше сообщение как только смогу.
Спасибо за понимание.
.
;


письма с полями X-Spam-Flag и X-Quarantined, в значении которых есть
слово "YES", можно и не доставлять самостоятельно в фолдер Junk, т. к.
этот фолдер будет указан exim'ом доставщику.

пример значения confVIRT_MDIR_PIPE_PERSONAL_QUARANTINE для dovecot'а на
FreeBSD:

define(`confVIRT_MDIR_PIPE_PERSONAL_QUARANTINE',
`/usr/local/libexec/dovecot/deliver -d $local_part@$domain -m Junk')dnl



-- 
Best wishes Victor Ustugov   mailto:victor на corvax.kiev.ua
public GnuPG/PGP key:        http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 77186900, 371808614 nic-handle: CRV-UANIC




Подробная информация о списке рассылки exim-conf