Ошибка при совместной работе Outlook и Dovecot

Автор: Admin | 18.04.2015

При работе клиента Outlook на сервере регистрируется ошибка Error: stat(.dovecot.sieve/tmp) failed: Not a directory. Так же она возникает при попытке импорта учетных записей на электронную почту outlook.com (live.com, hotmail.com), проходит авторизация, но прогресс стоит на месте. Соответственно почта не импортируется. В заметке рассмотрена причина и решение данного вопроса

IMAP сервер, с которого происходит экспорт - Dovecot, с настроенной сортировкой sieve. При коннекте и попытке импорта в логе dovecot.log появляется ошибка:

IMAP([email protected]): Error: stat(/usr/mail/domain.com/[email protected]/.dovecot.sieve/tmp) failed: Not a directory

В файле dovecot.conf указан именно этот путь:

plugin {
 sieve=/usr/mail/%d/%u/.dovecot.sieve
 }

Судя по всему, дело в реализации забора почты Outlook'ом и сделать с этим ни чего нельзя. Он интерпретирует данный файл как один из каталогов с почтой и пытается забрать из него сообщения. Ошибка наблюдается как при импорте почты в облако, так и при обычной работе клиента Outlook. С одной стороны, такое поведение логично, ведь все каталоги, начинающиеся с точки, являются каталогами с почтой (Maildir) и выглядят следующим образом:

tree /usr/mail/domain.com/[email protected]/
|-- .Drafts
|   |-- cur
|   |   |-- 1394074522.M592755P45733
|   |   |-- ...
|   |-- dovecot-uidlist
|   |-- dovecot.index
|   |-- dovecot.index.cache
|   |-- dovecot.index.log
|   |-- maildirfolder
|   |-- new
|   |-- tmp
|-- .INBOX.Custom Directory 1
|   |-- cur
|   |   |-- 1394074522.M592755P45733
|   |   |-- ...
|   |-- dovecot-keywords
|   |-- dovecot-uidlist
|   |-- dovecot.index.cache
|   |-- dovecot.index.log
|   |-- maildirfolder
|   |-- new
|   |-- tmp
|-- .INBOX.Custom Directory 2
|   |-- cur
|   |   |-- 1394074510.M271298P45733
|   |   |-- ...
|   |-- dovecot-keywords
|   |-- dovecot-uidlist
|   |-- dovecot.index.cache
|   |-- dovecot.index.log
|   |-- maildirfolder
|   |-- new
|   |-- tmp
|-- .Sent
|   |-- cur
|   |   |-- 1401957899.M143293P50237
|   |   |-- ...
|   |-- dovecot-keywords
|   |-- dovecot-uidlist
|   |-- dovecot.index
|   |-- dovecot.index.cache
|   |-- dovecot.index.log
|   |-- maildirfolder
|   |-- new
|   |-- tmp
|-- .Trash
|   |-- cur
|   |   |-- 1393309932.M87457P82790
|   |-- dovecot-uidlist
|   |-- dovecot.index.cache
|   |-- dovecot.index.log
|   |-- maildirfolder
|   |-- new
|   |-- tmp
|-- cur
|   |-- 1391595621.M706764P48743
|   |-- ...
|-- sieve
|   |-- managesieve.sieve
|   |-- tmp
|-- new
|   |-- 1404725432.M962838P14502
|-- tmp
|-- .dovecot.sieve -> sieve/managesieve.sieve
|-- .dovecot.sieve.log
|-- .dovecot.svbin
|-- dovecot-keywords
|-- dovecot-uidlist
|-- dovecot-uidvalidity
|-- dovecot-uidvalidity.52f20f7a
|-- dovecot.index
|-- dovecot.index.cache
|-- dovecot.index.log
|-- subscriptions

С другой - остальные клиенты нормально работают и видят всю почту без ошибок, не пытаясь прочитать .dovecot.sieve как каталог, по крайней мере при использовании ThunderBird или веб-интерфейса подобного не наблюдается.

Решить можно двумя способами. Первый - изменить положение файла .dovecot.sieve, но придется у каждого ящика с настроенными фильтрами переносить этот файл руками (или скриптом). На боевом сервере я не рискнул так делать, боясь сломать всю пользователькую сортировку. Второй и более простой - скрыть каталог sieve, а следовательно и файл .dovecot.sieve из списка подписки. Для этого в dovecot.conf внести строку:

maildir_stat_dirs=yes

После рестарта сервиса импорт успешно начался и ошибка исчезла.

На будущее желательно знать и сразу помещать файл .dovecot.sieve в каталог sieve при начальной настройке sieve, т.к. руководство по dovecot в разделе Optimizations говорит, что не желательно в Maildir иметь файлы, начинающиеся с точки.

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

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