15 августа 2021

Конвертация Maildir хранилища в Dovecot (LAYOUT=fs:UTF-8)

Если вы используете dovecot для предоставления IMAP и клиентов с Outlook IMAP, то есть проблема - используя стандарт хранения файлов по-умолчанию

mail_location = maildir:/var/vmail/%d/%n

получим массу папок в UTF-7 названиях, плюс подпапки будут суммироваться в одно большое имя (пользователи любят собирать письма во Входящих по подпапкам):

.INBOX.&BBEEQwRFBDMEMAQ7BEIENQRABDgETw-

Чтобы сделать хранение подпапок как подпапок на диске (через LAYOUT=fs), плюс избавиться от малопонятного UTF-7 и сделать нативный UTF-8:

INBOX/Бухгалтерия

необходимо будет сначала временно в команде конвертации doveadm backup, а потом, после полной конвертации уже и в конфигурации dovecot изменить формат хранения на:

mail_location = maildir:/var/vmail/%d/%n:LAYOUT=fs:UTF-8

Сначала надо убедиться, что задан separator по-умолчанию в вашей конфигурации. doveconf namespaces покажет их, если separator не задан, то зададим его равным "." (это значение по-умолчанию):

namespace inbox {
 ..
 separator = "."
 ..
}


Возможно у вас уже есть namespace {} - тогда задать надо там. После полной конвертации его надо изменить на "/".

Собственно, сама конвертация происходит в виде копирования в новое местоположение файлов с новой системой названий. Команда для конвертации (из под root):

doveadm -D -o "mail_location = maildir:/var/vmail/%d/%n:LAYOUT=fs:UTF-8" backup -u myuser@mydomain.tld maildir:/var/vmail/domain.tld/myuser2:LAYOUT=fs:UTF-8

Далее удаляем старую папку myuser и переименовываем новую myuser2 в имя старой myuser.

Самое главное - везде в конфигурации Dovecot заменить значение mail_location и separator на новое значение. Иначе будет создаваться папки со старыми именами =)