>[оверквотинг удален]
>>> dovecot[31438]: pop3(a): Error: opendir(/var/mail/a/new) failed: Permission denied
>>> (euid=516(a) egid=100(users) missing +r perm: /var/mail/a/new, we're not in group 12(mail))
>> не могу создать директорию /var/mail/a/new - потому как user: "a" id=516,gid=100 не
>> в группе mail(gid=12)
>> В логах все очень понятно расписано.
>> Читать wiki не очень удобно, это конечно же не структурированная документация,
>> но вполне можно.
> Большое спасибо за оценку моего развития, это всегда приятно )
> А какой это проливает свет на стандартную структуру каталогов maildir?
> (вы не правы - см коммент выше, там написано) что есть "стандартная структура maildir"? RFC на данный формат просто нет.
Те (то есть) Вы не удосужились изучить формат?
Ниже, то что я себе набросал много лет назад, на скорую руку, для
общего развития, надеюсь хоть какую-то пользу принесет...
Описание формата Maildir
------------------------
Maildir - структура директорий в которой хранятся email сообщения.
Традиционно, email директории где сохраняются email в виде текстовых
файлов, называются "mboxes".
Mboxes имеют известные ограничения:
- невозможность одновременного использования разными приложениями,
только одно приложение может использовать mboxes в конкретный момент
времени
- для одновременного использования несколькими приложениями, необходимо
использовать блокировку файлов: locking
- при использовании блокировки часто возникают проблемы, особенно в случае
сетевых файловых систем, например: nfs, samba и тд
- проблемы с locking могут привести к порче mboxes при одновременном
использовании несколькими приложениями
Спецификация Maildir в отличие от Mboxes:
- позволяет одновременную работу
- не требует использовать механизм locking'а
- приложения могут производить одновременный update в maildir
Содержимое Maildir
"maildir" - структура директорий:
- в Courier создается утилитой maildirmake (maildrop-maildirmake)
- в procmail создается автоматически
- в dovecot создается автоматически
Обычно, "maildir" не требует "group"/"world" привилегий, пока не потребуется
чтобы кто-то еще мог читать Вашу почту.
Maildir содержит три поддиректории:
- tmp
- new
- cur
Эти три директории входят в состав "maildir", куда и будет доставляться
новая почта.
Дополнительные директории/фолдеры с именами, которые начинаются с "."
- .Drafts
- .Sent
также имееют внутри структуру поддиректорий, аналогичную первичной:
- tmp, new, cur + дополнительно, файл нулевой длины maildirfolder,
цель которого, информировать агент почтовой доставки о том что он
действительно доставляет почту в folder и дополнительную информации,
должен или может получить из родительской директории.
Нет необходимости в реальной вложенности фолдеров. Фолдеры, такие как
.Sent, в реалии, могут не иметь вложенных поддиректорий-фолдеров.
Только primary-первичная (main) maildir содержит поддиректории, остальные,
могут вместо физической фложенности, использовать логическую вложенность,
которая реализуется посредством использования разделетеля "."
Например: фолдер ".Sent.2002" - обозначает subfolder "2002" для subfolder
"Sent".
Folder name encoding
Имена фолдеров могуь содержать любой Unicode символ, исключая управляющие:
- US-ASCII characters, U+0x0020 - U+0x007F
- исключение period ".", forward-slash "/" и амперсенд "&" символы
соответственно: "." = U+0x002E, "/" = U+0x002F, "&" = U+0x0026
- амперсенд представляется двумя символами: "&-"
- ".", "/" и non US-ASCII unicode символы, представляются с использованием
UTF-7 и модифицированным base64-encoding'ом.
Название non US-ASCII фолдера, начинается с символа "&" - это начало
модифицированной base64-encoding последовательности и заканчивается
символом "-". Последовательность 16-bit Unicode символов, записывется
в big-endian order, и кодируется base64-encoding методом (RFC1521 sec.5.2)
с использованием следующей модификацией:
- "=" опускается
- "," используется как разделитель вместо "/"
Пример: the word “Resume” with both "e"s being the e-acute character, U+0x00e9, is encoded as “R&AOk-sum&AOk-” (so a folder of that name would be a maildir subdirectory called “.R&AOk-sum&AOk-”).
ПО которое использует "maildirs" может создавать дополнительные файлы,
кроме директорий tmp,new,cur для собственных целей, индексы, списки, логи,
зависит от реализации Maildir.
Почтовые сообщения
сохраняются в отдельных файлах, "one mail per one file", каждое письмо
в отдельном файле.
- tmp - для временной работы с mail в процессе доставки
- new - содерджит файлы-письма, доставленные, но еще не просмотренные
- cur - содержит письма которые хоть раз были открыты mail applications
Добавление нового сообщения в maildir
Общий формат maildir файла:
"<base filename>:2,<flags>"
При создании имени нового файла для сохранения почты, используется
два формата:
- "time.MusecPpid.host"
- "time.MusecPpid_unique.host"
"time" и "usec" - берутся из системного вызова gettimeofday,
"pid" - номер ткущего процесса доставки этой почты в maildir
"host" - имя хоста где производится доставка
Верхнее из описания Maildir от Courier, Dovecot использует свои
дополнительные расширения:
- imap uid - постоянный уникальный ID номер для каждого сообщения
dovecot использует dovecot-uidlist файл для сохранения соответствия
uid <-> filename, файл базируется на формате Courier IMAP:
courierimapuiddb file
# cat dovecot-uidlist
3 V1341751864 N35214 Gd7a85e003402aa5779100000b0808fdd
22215 :1450888146.M18948P72215.joker.jinr.ru,S=2306,W=2359
30270 :1497439134.M837822P41918.joker.jinr.ru,S=40025,W=40935
30285 :1497496598.M121151P77394.joker.jinr.ru,S=7161,W=7263
34220 :1516186098.M483926P75277.joker.jinr.ru,S=3661182,W=3708766
34297 :1516608714.M734791P3232.joker.jinr.ru,S=3027,W=3083
34316 :1516692335.M644598P7722.joker.jinr.ru,S=13970,W=14227
34512 :1517390833.M516761P46296.joker.jinr.ru,S=13816,W=14138
34706 :1518089238.M969474P25018.joker.jinr.ru,S=5893,W=5988
34724 :1518174535.M309472P84653.joker.jinr.ru,S=3501,W=3600
35153 :1519822787.M80161P28033.joker.jinr.ru,S=2713,W=2773
35213 :1519987101.M852881P74418.joker.jinr.ru,S=4644,W=4762
#
файл начинается с заголовка:
3 V1341751864 N35214 Gd7a85e003402aa5779100000b0808fdd
- 3 версия формата используемого Dovecot v1.1+
- 1341751864 IMAP UIDVALIDITY
- 35214 UID который будет присвоен следующему сообщению-файлу
- d7a85e003402aa5779100000b0808fdd 128'bitный mailbox global UID hex
- возможны другие поля, порядок которых неважен
V1 - совместима с Courier
V2 - была использована несколькими non-release версиями
вслед за заголовком следует список мапирования UID <-> имена файлов
22215 :1450888146.M18948P72215.joker.jinr.ru,S=2306,W=2359
30270 :1497439134.M837822P41918.joker.jinr.ru,S=40025,W=40935
- 22215,30270 - UID сообщений-писем
- S=2306 и S=40025 - размеры файлов
- W=2359 и W=40935 - размеры файлов +CR+LF
- ,S=<size>: указывает размер файла (имя файла содержит размер который
полезен для Maildir++ quota
- ,W=<vsize>: указывает размер файла по RFC822.SIZE, размер файла с CR+LF,
если письмо сохранено с CR+LF, <size> == <vsize>
Использование timestamp в именах файлов
Вернемся к формату имени файла maildir:
"<base filename>:2,<flags>"
Как уже было сказано, <base filename> состоит из timestamp, имени хоста
и флагов:
# ls -la cur
-rw-r--r-- 1 lavr 1000 2306 Dec 23 2007 1450888146.M18948P72215.joker.jinr.ru,S=2306,W=2359:2,RS
-rw-r--r-- 1 lavr 1000 40025 Jun 14 2007 1497439134.M837822P41918.joker.jinr.ru,S=40025,W=40935:2,S
-rw-r--r-- 1 lavr 1000 7161 Jun 15 2007 1497496598.M121151P77394.joker.jinr.ru,S=7161,W=7263:2,S
-rw-r--r-- 1 lavr 1000 3661182 Jan 17 13:48 1516186098.M483926P75277.joker.jinr.ru,S=3661182,W=3708766:2,RS
...
где:
1450888146.M18948P72215.joker.jinr.ru,S=2306,W=2359:2,RS
^^^^^^^^^^- unix timestamp ^^^^^^- размер^-новое,далее состояние
- :2 - новое, если состояние отсутствует, значит:
not seen/replied/marked/deleted
состояние:
- "D" - черновое "draft"
- "R" - "reply"
- "S" - "seen" просмотрено
- "T" - "trashed" помечено на удаление
- "F" - помечено пользователем
Использование "timestamps":
- mtime используется как "IMAP INTERNALDATE" по RFC 3501 сек. 2.3.3
и не должно изменяться в соответствии с сек.2.3.1.1.4
- ctime используется DOvceot для внутренних нужд "save/copy date", за
исключением корректного значения в "dovecot.index.cache". Используется
внешними командами, например: 'doveadm expunge savedbefore'
В директориях "cur" и "new", в качестве timestamp используется:
- mtime - для определения изменений mailbox и регенерации индексных
файлов
Структура директорий.
По умолчанию, Dovecot использует свой Maildir++ формат, это означает что
все фолдеры находятся внутри директории ~/Maildir:
Описание формата Maildir++
http://www.courier-mta.org/imap/README.maildirquota.html
Основным достижением Maildir++, является реализация maildirquota,
однако при этом, считается что лучшей реализацией квот для почтовых
ящиков, будет квотирование на уровне файловой системы и использование
квот для каждого пользователся системными средствами.
И тем не менее, для формата Maildir имеется собственная реализация
квотирования, которая не зависит от квот на уровне файловой системы.
Важным условием для использования maildirquota является хранение почты
в формате maildir в домашней директории пользователя, другим ньюансом,
является использование квот для пользователей виртуального домена, когда
для доступа к почте пользователей виртуального домена используется один
специальный идентификатор пользователя.
http://www.courier-mta.org/maildir.html - спецификация
http://www.courier-mta.org/imap/README.maildirquota.html
https://wiki.dovecot.org/Quota/Maildir