У exim’a, есть мощная система, способная заменить и sieve и
procmail. В отличие от упомянутых почтовых фильтров, фильтр эксима
имеет более “человеческий” синтаксис, чем сразу и подкупает.
Для того что бы включить поддержку, достаточно раскомментировать строку
allow_filter в стандартном роутере userforward. Выглядеть он теперь
будет так:
После того, как рестартанем exim, можно настроить фильтр, создадим у
себя в домашнем каталоге файл .forward. Если мы создаем exim filter, он
обязательно должен начинаться со строки “# Exim filter”:
# Exim filter #Почту от списка рассылки FreeBSD сохраняем в # /home/hilik/Mail/freebsd-ua/freebsd-ua if$h_List-ID: is <freebsd.uafug.org.ua> then save /home/hilik/Mail/freebsd-ua/freebsd-ua endif #Почту на info@hilik.org.ua отправляем на спамфильтр для обучения if$h_To: is info@hilik.kiev.ua then deliver spam@hilik.org.ua endif if$h_Subject matches ^\[[Ss]pam\]: then save /dev/null endif
Переменные начинающиеся на $h - это переменные формируемые фильтром
из разных заголовков письма. Таким образом можно обработать любой
заголовок.
Помимо работы с заголовком, можно проверять еще ряд переменных,
включая $message_body, в этой переменной содержится, часть тела
сообщения(по умолчанию 500 строк, определяется переменной
message_body_visible). Оператор is, обозначает что происходит простое
сравнение переменной со строкой находящейся справа.
Если вы воспользуетесь оператором contains, проверяться будет частичное
совпадение, а если использовать matches, то проверку можно производить
с помощью regexpa.
Размещенного примера, в принципе, достаточно для 90% случаев.
Для тех кому моего примера мало, полная английская документация по адресу: Exim filter.
Либо обращайтесь - помогу написать более сложный фильтр.
Появидась такая задача: разрешить отправку за пределы локального
домена, только некоторым, emailы которых занесены в особый,
утвержденный руководством список. Взял я exim и начал крутить, в итоге
вот что получилось, приведенный код втавлять в начало acl_check_rcpt:
#По умолчанию никому не разрешено #отправлять за пределы нашего домена warn set acl_c4 = ${eval:0} #Разрешаем отправку к локальным пользователям warn domains = +local_domains set acl_c4 = ${eval: 1} #Разрешаем отправку пользователям описанным #в файле /usr/local/etc/exim/sendertable.dbm warn message = sender $sender_address domains = !+local_domains condition = ${if eq {${lookup{$sender_address}dbm{/usr/local/etc/exim/sendertable.dbm}}{yes}} set acl_c4 = ${eval:1} #Разрешаем отправку от пустого пользователя(всякие почтовые отлупы) warn message = empty sender domains = !+local_domains condition = ${if eq {$sender_address}{}} set acl_c4 = ${eval:1} #А тут у нас непосредственная блокировка отправок тех кому не разрешено #В предыдущих строках осуществлялась проверка и установка флагов deny message = Not allowed sender domains = !+local_domains condition = ${if eq {$acl_c4}{0}}
/usr/local/etc/exim/sendertable.dbm получается так, создаем файл
/usr/local/etc/exim/sendertable такого формата: