Maildir

Maildir – это формат хранения электронных писем на сервере электронной почты. В отличие от формата mbox, в котором все сообщения хранятся в одном файле, в формате maildir каждое письмо хранится в отдельном файле в соответствующей директории. Это делает процесс обработки и доступа к письмам более эффективным и надежным, так как отдельные письма могут обрабатываться независимо друг от друга.

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

Оригинальная спецификация формата Maildir была написана Дэниэлом Бернштейном, автором qmail, djbdns, и других программ. Хотя исходная спецификация и писалась автором специально для своей программы qmail, она носит довольно общий характер, так что может быть реализована во многих программах.

Сэм Варшавчик (Sam Varshavchik), автор Courier Mail Server и других программ, написал своё расширение формата Maildir под названием Maildir++ для поддержки вложенных папок и квот на почту. В каталогах Maildir++ находятся подкаталоги с названиями, начинающимися с точки («.»), которые также являются папками Maildir++. Это расширение в этой связи является нарушением спецификации Maildir, в которой приводится исчерпывающий список возможного содержимого Maildir, но это совместимое отклонение и другое программное обеспечение, поддерживающее Maildir, поддерживает и Maildir++.

При доставке сообщения оно помещается в файл в подкаталоге 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, так и флаги, определённые пользователем.

Программное обеспечение, непосредственно поддерживающее Maildir

Почтовые серверы

Агенты доставки

  • Procmail
  • Maildrop
  • Getmail, агент получения и доставки почты с поддержкой Maildir, являющийся альтернативой программе Fetchmail
  • mbsync
  • OfflineIMAP
  • mswatch
  • mpop

Программы чтения почты

  • Balsa, программа, прежде бывшая официальным пользовательским почтовым агентом GNOME (до Evolution)
  • Cone, почтовая программа с curses-интерфейсом
  • Gnus
  • mailx
  • GNUMail
  • KMail, программа чтения почты KDE
  • Mutt
  • Evolution, официальный почтовый клиент GNOME
  • Wanderlust

Утилиты индексирования и поиска в почте

  • Beagle, может индексировать Maildir и многие другие форматы хранения информации
  • Mairix, программа для индексирования и поиска сообщений электронной почты, сохранённых в формате Maildir, MH или mbox
  • Mboxgrep, программа, которая может производить поиск в папках Maildir. Это подобно использованию grep.
  • notmuch, программа для индексирования и поиска почтовых сообщений, сохранённых в Maildir
  • mu, набор утилит командной строки для поиска в каталогах Maildir

Обсуждение закрыто.