Назад | Перейти на главную страницу

Обслуживайте электронные письма из структуры папок с помощью dovecot

У меня есть много файлов eml, заархивированных из учетной записи и хранящихся в нескольких папках, по одной в месяц. Это не стандартная структура maildir, и файлы не имеют специальных имен, они просто такие:

2015-01/
 foo.eml
 bar.eml
 ...
2015-02/
 baz.eml
 qux.eml
 ...
etc

Я хотел бы сделать их доступными, только для чтения, через IMAP, желательно с использованием dovecot, без изменения структуры / именования, если это возможно. Было бы замечательно, если бы все электронные письма могли появляться в папке «Входящие» вместе, но отдельные папки по месяцам (так как они структурированы на диске) тоже подойдут.

Чтобы это сработало, вам нужно хотя бы переместить эти сообщения в MailDir как структура. Моя почта Dovecot выглядит так для аккаунта ahoy@iswhale.com

./iswhale.com/ahoy/.Drafts/tmp
./iswhale.com/ahoy/.Drafts/new
./iswhale.com/ahoy/.Drafts/cur
./iswhale.com/ahoy/cur
./iswhale.com/ahoy/new
./iswhale.com/ahoy/tmp

Если вы создадите новую подпапку, скажите «Архив», она будет выглядеть так:

./ahoy/.Archive/tmp
./ahoy/.Archive/new
./ahoy/.Archive/cur

Tmp, new и cur - это каталоги, созданные Dovecot, когда вы создаете эту новую папку в клиенте (например, Roundcube). Когда создается новая подпапка архива, структура каталогов становится следующей:

./ahoy/.Archive.Sub-Folder/tmp
./ahoy/.Archive.Sub-Folder/new
./ahoy/.Archive.Sub-Folder/cur

Итак, вам нужно будет настроить пути к каталогам, чтобы '2015-01' стал примерно таким:

./user/.Archive.2015-01/tmp
./user/.Archive.2015-01/new
./user/.Archive.2015-01/cur

Затем, как только эти каталоги будут созданы, вы скопируете файлы .eml (которые, я надеюсь, представляют собой просто текстовое электронное письмо того типа, который ожидает Dovecot) в целевой «новый» каталог. Подключитесь к предпочтительному клиенту IMAP, и все будет хорошо.

Думаю, я нашел способ настроить структуру maildir, не внося никаких изменений в имеющиеся у меня папки и файлы. Я создал отдельную папку maildir в другом месте и использовал символические ссылки, чтобы указать на мои папки, содержащие почту, например:

maildir
├─ .2015-01
│  └─ cur -> path/to/2015-01
└─ .2015-02
   └─ cur -> path/to/2015-02

Я дал dovecot права на запись для maildir и его подкаталогов, чтобы он мог записывать свои индексные файлы, новые и tmp-папки и многое другое, но у него нет прав на запись для фактических папок почтового архива.

Для конфигурации dovecot (я обслуживаю только эти файлы на этом сервере, больше ничего) я установил mail_location = maildir:/path/to/my/maildir и использовал статические passdb и userdb.

Эта установка сработала, но я также столкнулся с несколькими проблемами:

  • Все письма отображаются как непрочитанные

Решение: запустить doveadm flags add '\Seen' mailbox 201x-xx

  • Почтовый клиент может менять флаги, например, просмотренный и удаленный.

Решение: добавлен глобальный файл ACL, содержащий: * owner lr

Пока все хорошо, я обновлю, если появится что-нибудь еще.