The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Dovecot и maildir"
Отправлено lavr, 24-Сен-18 09:28 
>[оверквотинг удален]
>>> 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

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру