При работе клиента 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 иметь файлы, начинающиеся с точки.