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
Почтовые серверы
- IMAP-сервер bincimap
- IMAP-сервер Dovecot
- SMTP- и IMAP-сервер Courier Mail Server, для которого был изобретён формат Maildir++
- SMTP-сервер Exim
- SMTP-сервер Postfix
- SMTP-сервер Qmail, для которого был изобретён формат Maildir
- Открытый кросс-платформенный SMTP- и POP3-сервер XMail
- SMTP-сервер MeTA1
- Почтовый сервер MagicMail
- Почтовый сервер Communigate Pro
- Почтовый сервер Office Mail Server
Агенты доставки
- 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