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