exim и dovecot delivery

Dovecot очень функциональный POP3/IMAP сервер, который предоставляет множество возможностей и имеет плагины для многих нужд. Очень удобный плагин — это sieve, который позволяет создавать пользовательские фильтры для почтовых ящиков.

Но что бы это всё работало — нужно использовать dovecot deliver, так как он и сможет обрабатывать входящие письма, как положено.

Поскольку многие сейчас используют панель управления vexim, то приведу настройки отдельно с панелью и без.

Для Vexim

Тестовый стенд: OpenBSD 5.0, exim 4.76, dovecot, 2.0.17

1) Настройка dovecot.

Для успешной работы необходимы такие условия:

— dovecot должен быть собран с поддержкой delivery (по умолчанию)
— должен быть настроен socket master:

в файле 10-master.conf пишем такое:

service auth {
unix_listener auth-master {
mode = 0600
user = _exim
group = _exim
}

При этом, этот пользователь является владельцем виртуальных ящиков и владельцем log’a dovecot’a, иначе будем получать ошибку (ошибка общая и понять в чём именно причина — невозможно)

T=dovecot_virtual_delivery defer (0): Child process of dovecot_virtual_delivery transport returned 75 (could mean temporary error) from command: /usr/local/libexec/dovecot/dovecot-lda

в файле 15-lda.conf добавляем такие строки:

lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes

Последний штрих (меняем владельца файла логов так, что бы он совпадал с владельцем сокета unix_listener auth-master)

#chown _exim /var/log/dovecot.log

2) Настройка exim.

Нам нужно создать только новый транспорт

dovecot_virtual_delivery:
driver = pipe
command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain -c /etc/dovecot/dovecot.conf -f $sender_address -e
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add
log_output
user = _exim
temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78

и поместить его после транспорта local_delivery.
Теперь необходимо в роутерах virtual_domains и virtual_domains_catchall изменить file_transport на такую строку

file_transport = dovecot_virtual_delivery

3) Заключение.

После всех изменений необходимо перезапустить exim, dovecot (почему-то при reload не срабатывало). Строка

2012-03-31 14:27:33 [13285] 1SDwSy-0005P8-TJ => /var/mail/vmail/domain.ua/postmaster/Maildir F= P= R=virtual_domains T=dovecot_virtual_delivery S=932 QT=1s DT=0s

содержит транспорт T=dovecot_virtual_delivery, что и означает, что сработал наш роутер.

Примечание:

Для версии Dovecot 1.x всё тоже самое, но с такими отличиями:

— в транспорте dovecot_virtual_delivery command выглядит так:

command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain

— изменения в 15-lda.conf делать не надо, так как в версии 1.Х нет таких параметров.

Без Vexim’a

Тестовый стенд: FreeBSD 7.0, exim 4.69_3, dovecot, 1.1.15

1) dovecot

В dovecot.conf

...
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
}
...
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = mailnull
group = mail
}
...

2) exim

добавляем новый роутер

dovecot_user:
driver = accept
condition = ${lookup mysql{SELECT `goto` FROM \
`alias` WHERE \
`address`='${quote_mysql:$local_part@$domain}' OR \
`address`='${quote_mysql:@$domain}'}{yes}{no}}
transport = dovecot_delivery

добавляем новый транспорт:

dovecot_delivery:
driver = pipe
command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
message_prefix =
message_suffix =
delivery_date_add
envelope_to_add
return_path_add
log_output
user = mailnull

3) Заключение.

В логах видим наш искомый роутер и транспорт:

Mar 31 11:00:44 srv exim[12110]: [12110] 1SDw32-00039J-Jf => admin F= P= R=dovecot_user T=dovecot_delivery S=743 QT=0s DT=0s

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *