Maildir

Материал из Provizorii
Перейти к: навигация, поиск

Maildir — это название распространённого формата хранения электронной почты, не требующий монопольного захвата файла для обеспечения целостности почтового ящика при чтении, добавлении или изменении сообщений. Каждое сообщение хранится в отдельном файле. Все изменения делаются при помощи атомарных файловых операций, таким образом, монопольный захват файла ни в каком случае не нужен. Maildir — это каталог (чаще всего с именем Maildir) с тремя подкаталогами: tmp, new и cur.

При доставке сообщения оно помещается в файл в подкаталоге tmp, имя файла формируется из текущего времени, имени хоста, идентификатора процесса, создавшего этот файл, и некоторого случайного числа — таким образом, гарантируется уникальность имен файлов. После записи в файл всего сообщения создается жесткая ссылка на этот файл в каталоге new, а текущая ссылка из tmp удаляется — это делается для того, чтобы никакой другой процесс не смог прочитать содержимое сообщения до тех пор, оно не будет записано полностью. По такому же алгоритму при чтении сообщения (это может делать как MUA, так и другой MDA, предоставляющий доступ к Maildir по протоколу POP3 или IMAP) оно перемещается в каталог cur, при этом название файла изменяется: к нему добавляются пометки о прочтении, ответе, удалении и так далее.

Maildir++ — это дальнейшее усовершенствование Maildir с поддержкой вложенных каталогов IMAP (они должны начитаться с ".") и квот.

При доставке сообщения оно помещается в файл в подкаталоге tmp (например, SMTP-сервером postfix). Имя файла формируется из текущего времени, имени хоста, идентификатора процесса, создавшего этот файл, и некоторого случайного числа — таким образом гарантируется уникальность имен файлов.

После записи в файл всего сообщения обычно создается жесткая ссылка на этот файл в каталоге new, а текущая ссылка из tmp удаляется, но в некоторых реализациях просто используется системный вызов rename(), — всё это делается для того, чтобы никакой другой процесс не смог прочитать содержимое сообщения до тех пор, пока оно не будет записано полностью, так как MUA никогда не смотрят в tmp.

Когда почтовый клиент находит сообщения в каталоге new, он перемещает их в cur (с помощью rename(), так как использование жёстких ссылок в данном случае может привести к дублированию сообщений) и перед чтением файлов добавляет к их именам информационные суффиксы. Информационный суффикс состоит из двоеточия (для разделения уникальной части имени файла и текущей информации), числа '2', запятой и различных флагов. Число '2' указывает, грубо говоря, версию информации после запятой. '2' — это единственно официально определённая в настоящее время версия. '1' относится к экспериментальной версии. Можно лишь предположить, что этот номер версии использовался в процессе разработки формата Maildir. Спецификация определяет флаги, которые показывают, было ли сообщение прочитано, удалено и так далее, для них используются первые (заглавные) буквы следующих слов: Passed, Replied, Seen, Trashed, Draft и Flagged. В Dovecot используются буквы нижнего регистра (строчные) для обеспечения соответствия 26 ключевым словам IMAP, куда могут входить как стандартные ключевые слова, такие как $MDNSent, так и флаги, определённые пользователем.

См. также