Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Интересные нестандартные возможности Exim


В этом выпуске:

Exim, настройка фильтров.

Exim, список разрешенных отправителей.

 

 

Exim, настройка фильтров.

У exim’a, есть мощная система, способная заменить и sieve и procmail. В отличие от упомянутых почтовых фильтров, фильтр эксима имеет более “человеческий” синтаксис, чем сразу и подкупает.

Для того что бы включить поддержку, достаточно раскомментировать строку allow_filter в стандартном роутере userforward. Выглядеть он теперь будет так:

userforward:
driver = redirect
check_local_user
file = $home/.forward
no_verify
no_expn
check_ancestor
#Строку, находящуюся ниже мы и раскомментировали
allow_filter
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
condition = ${if exists{$home/.forward} {yes} {no} }

После того, как рестартанем 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.
Либо обращайтесь - помогу написать более сложный фильтр.

 

Exim, список разрешенных отправителей.

Появидась такая задача: разрешить отправку за пределы локального домена, только некоторым, 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 такого формата:

hilik@hilik.kiev.ua yes

Потом делаем:

exim_dbmbuild /usr/local/etc/exim/sendertable /usr/local/etc/exim/sendertable.dbm

остается перезапустить exim.

 

 


В избранное