linux:mail

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

  • linux/mail.txt
  • Последнее изменение: 2020/03/10 16:39
  • (внешнее изменение)