Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Формат электронной почты Maildir - это распространенный способ хранения сообщений электронной почты, в котором каждое сообщение хранится в отдельном файле с уникальным именем, а каждая почтовая папка является каталогом файловой системы. Локальная файловая система обрабатывает блокировку файлов при добавлении, перемещении и удалении сообщений. Основная цель разработки Maildir - устранить необходимость в программном коде для обработки блокировки и разблокировки файлов . [1]

Внутренняя структура

Технические характеристики [ править ]

Maildir каталог (часто называют Maildir) , как правило , имеет три подкаталога с именем tmp, newи cur.

В tmpподкаталоге временно хранятся сообщения электронной почты, которые находятся в процессе доставки. В этом подкаталоге также могут храниться другие типы временных файлов. В newподкаталоге хранятся сообщения, которые были доставлены, но еще не были просмотрены каким-либо почтовым приложением. В curподкаталоге хранятся сообщения, которые уже были просмотрены почтовыми приложениями. [2]

Maildir ++ [ править ]

Сэм Варшавчик, автор Courier Mail Server и другого программного обеспечения, написал расширение [2] [3] для формата Maildir под названием Maildir ++ для поддержки подпапок и почтовых квот. Каталоги Maildir ++ содержат подкаталоги с именами, начинающимися с символа '.' (точка), которые также являются папками Maildir ++. Это расширение не является нарушением спецификации Maildir, которая явно предусматривает возможность добавлять в maildir больше, чем tmp, new, cur.

Техническая операция [ править ]

Программа , которая обеспечивает сообщение по электронной почте, на агент доставки почты , записывает его в файл в tmpкаталоге с уникальным именем. [4] [5] [2] Примерно в 1995 г. алгоритм, рекомендованный qmail для генерации уникальных имен файлов, заключался в объединении, разделенных символом точки , текущего времени Unix , идентификатора текущего процесса (PID) и текущего имени хоста ; проверьте, существует ли это имя файла уже (используя stat()); и, если имя файла существует, отложите доставку на две секунды, а затем повторите попытку. [1] (Этот алгоритм подвергся критике в 2006 году Тимо Сирайненом., создатель Dovecot . [6] ) К 2000 году было рекомендовано добавлять к PID значение счетчика каждого процесса, значение которого должно увеличиваться после каждой доставки; и предложение об ограничении скорости было снято. [4] К 2003 году в рекомендации были внесены дополнительные поправки, согласно которым вместо PID и счетчика должна создаваться средняя часть имени файла путем «конкатенации достаточного количества следующих строк, чтобы гарантировать уникальность» даже при одновременном использовании нескольких доставки в один и тот же maildir от одного или нескольких процессов: [7]

  • # n , где n - (в шестнадцатеричном формате) результат системного вызова unix_sequencenumber () операционной системы [ необходима цитата ] , который возвращает число, которое увеличивается на 1 каждый раз при вызове, начиная с 0 после перезагрузки.
  • X n , где n (в шестнадцатеричном формате) - результат системного вызова unix_bootnumber () операционной системы [ необходима цитата ] , который сообщает, сколько раз система была загружена. Вместе с # это гарантирует уникальность; к сожалению, большинство операционных систем не поддерживают unix_sequencenumber () и unix_bootnumber.
  • R n , где n - (в шестнадцатеричном формате) вывод системного вызова unix_cryptorandomnumber () операционной системы [ необходима ссылка ] или эквивалентного источника, такого как / dev / urandom. К сожалению, некоторые операционные системы не включают криптографические генераторы случайных чисел.
  • I n , где n - (в шестнадцатеричном формате) номер inode UNIX этого файла. К сожалению, номера inode не всегда доступны через NFS.
  • V n , где n - (в шестнадцатеричном формате) номер устройства UNIX для этого файла. К сожалению, номера устройств не всегда доступны через NFS. (Номера устройств также бесполезны со стандартной файловой системой UNIX: maildir должен находиться на одном устройстве UNIX для работы link () и rename ().)
  • M n , где n - (в десятичном формате) счетчик микросекунд из того же метода gettimeofday (), который используется для левой части уникального имени.
  • P n , где n - это (в десятичном формате) идентификатор процесса.
  • Q n , где n - это (в десятичном формате) количество доставок, выполненных этим процессом.

По состоянию на ноябрь 2018 года автор qmail Бернштейн не вносил дальнейших изменений в рекомендации по созданию файлов. [8] В современных системах POSIX временные файлы можно безопасно создавать с помощью mkstempфункции библиотеки C.

Процесс доставки сохраняет сообщение в maildir, создавая и записывая этот файл, а затем перемещая его в . Перемещение может быть выполнено с помощью переименования , которое во многих системах является атомарным. [9] В качестве альтернативы это можно сделать, жестко связав файл с файлом, а затем отключив его . Любой оставшийся файл в конечном итоге будет удален. Эта последовательность гарантирует, что программа, читающая maildir, не увидит частично написанное сообщение. Одновременно может быть несколько программ, читающих maildir. Они варьируются от почтовых пользовательских агентов (MUA), которые напрямую обращаются к файловой системе сервера через протокол доступа к сообщениям Интернета или протокол почтового отделения.tmp/uniquefilenamenew/uniquefilenamenewtmpсерверы, действующие от имени удаленных MUA, для таких утилит, как biff и rsync , которые могут знать или не знать о структуре maildir. Читатели никогда не должны заглядывать внутрь tmp.

Когда осведомленный процесс чтения maildir ( POP- или IMAP- сервер или почтовый пользовательский агент, действующий локально) находит сообщения в newкаталоге, он должен их переместить cur. Это просто средство уведомить пользователя «у вас X новых сообщений». [10] Это перемещение должно выполняться с использованием rename(), так как метод неатомарной связи и отмены связи может привести к дублированию сообщений. На этом этапе к именам файлов добавляется информационный суффикс. Он состоит из двоеточия (чтобы отделить уникальную часть имени файла от фактической информации), «2», запятой и различных флагов.. «2» указывает версию информации, которая следует за запятой. «2» - единственная официально указанная в настоящее время версия, «1» - экспериментальная версия. Спецификация определяет флаги, которые показывают, было ли сообщение прочитано, удалено и т. Д.: Начальная (заглавная) буква «Пропущено», «Ответлено», «Просмотрено», «Удалено», «Черновик» и «Помечено». [7] Dovecot использует строчные буквы для соответствия 26 ключевым словам IMAP, [5] которые могут включать стандартные ключевые слова, такие как $ MDNSent , и пользовательские флаги.

Хотя Maildir был предназначен для использования без блокировки, на практике некоторые программы, использующие Maildirs, также используют блокировки, например Dovecot. [11]

Проблемы совместимости файловой системы [ править ]

Стандарт Maildir может быть реализован только в системах, которые принимают двоеточия в именах файлов.

Системы, в которых не допускается использование двоеточий в именах файлов (включая Microsoft Windows и некоторые конфигурации Novell Storage Services ), могут использовать альтернативный разделитель, например ";" или же "-". Часто бывает тривиально исправить бесплатное программное обеспечение с открытым исходным кодом, чтобы использовать другой разделитель. [12]

Поскольку в настоящее время нет соглашения о том, каким должен быть этот альтернативный разделитель, могут возникнуть трудности взаимодействия между различными программами, поддерживающими Maildir, в этих системах. Однако не все программное обеспечение, связанное с Maildir, должно знать, что такое символ-разделитель, потому что не все программное обеспечение, связанное с Maildir, должно иметь возможность читать или изменять флаги сообщения («читать», «отвечать на» и т. Д.); Программное обеспечение, которое просто доставляет в Maildir или архивирует старые сообщения только по дате, должно работать независимо от того, какой разделитель используется. Если только MUA необходимо читать или изменять флаги сообщений и используется только один, то можно использовать нестандартные альтернативные разделители без проблем совместимости.

Программное обеспечение, которое напрямую поддерживает Maildir [ править ]

Почтовые серверы [ править ]

  • Сервер Dovecot IMAP
  • Сервер Courier Mail Server SMTP и IMAP, для которого был изобретен формат Maildir ++
  • Sendmail Исходный SMTP-сервер
  • SMTP-сервер exim
  • SMTP-сервер Postfix
  • qmail SMTP-сервер, для которого был изобретен формат Maildir
  • SMTP-сервер MeTA1
  • SMTP-сервер OpenSMTPD

Агенты по доставке [ править ]

  • procmail
  • Агент доставки Dovecot
  • maildrop
  • getmail , агент поиска и доставки почты, поддерживающий Maildir, альтернатива Fetchmail
  • fdm
  • OfflineIMAP
  • mbsync

Читатели почты [ править ]

  • aerc [13] (эффективный и расширяемый почтовый клиент)
  • Balsa ранее была официальной программой чтения почты GNOME (до Evolution)
  • Конус для чтения почты на основе проклятий
  • Evolution , официальный почтовый клиент GNOME
  • GNUMail
  • Gnus
  • KMail , программа для чтения почты KDE
  • mailx
  • Матт
  • Notmuch [14] (быстрая система электронной почты с глобальным поиском и тегами)
  • Сосна / Альпийский
  • Mozilla Thunderbird - экспериментальный и «отключен по умолчанию, потому что все еще есть много ошибок» [15]

Примечания и ссылки [ править ]

  1. ^ a b Бернштейн, Дэниел Дж. (1995). "майлдир (5)" . Архивировано из оригинала на 1997-10-12 . Проверено 23 ноября 2018 .
  2. ^ a b c Сэм Варшавчик (2009). "майлдир" . Проверено 24 июля +2016 .
  3. ^ Сэм Варшавчик (2011). «Maildir ++» . Проверено 24 июля +2016 .
  4. ^ a b Бернштейн., Дэниел Дж. (ок. 2000 г.) [Впервые опубликовано в 2000 г. или ранее]. «Использование формата maildir» . Архивировано 2 сентября 2000 года . Проверено 23 ноября 2018 .
  5. ^ a b Dovecot Wiki: формат maildir
  6. ^ Сирайнен, Тимо (2006-12-05). «Отличие от 'MailboxFormat / Maildir ' » . Проверено 23 ноября 2018 .Вся эта неприятность довольно бессмысленна. Только первый шаг - это то, что действительно гарантирует, что письма не будут перезаписаны, остальное просто звучит хорошо. Даже если время от времени они могут обнаруживать проблему, они не обеспечивают гарантированной защиты и так же легко передают повторяющиеся имена файлов для перезаписи существующих писем. Шаг 2 бессмысленен, потому что между шагами 2 и 3 существует состояние гонки. Сама по себе комбинация PID / хост уже должна гарантировать, что он никогда не найдет такой файл. Если это так, что-то сломалось, и проверка stat () не поможет, поскольку другой процесс может делать то же самое в то же время, и вы в конечном итоге записываете в тот же файл в tmp /, вызывая повреждение почты. На шаге 4 ссылка () также не сработает, если идентичный файл уже был в maildir, верно? Неправильный.Возможно, файл уже был перемещен в каталог cur /, и, поскольку он может содержать любое количество флагов, вы больше не сможете проверить с помощью простого stat (), существует он или нет. Итак, действительно, все, что важно для предотвращения перезаписи писем в вашем maildir, - это шаг 1. Всегда создавайте имена файлов, которые гарантированно будут уникальными. Забудьте о двухсекундном ожидании и о том, что на странице руководства Qmail говорится о
  7. ^ a b Bernstein., Daniel J. (2003) [Самая ранняя версия этого документа была впервые опубликована в 2000 году или ранее]. «Использование формата maildir» . Архивировано 01 апреля 2003 года . Проверено 23 ноября 2018 .
  8. ^ "Снимки cr.yp.to/proto/maildir.html Wayback Machine" . Интернет-архив . 2018 . Проверено 23 ноября 2018 .
  9. ^ "переименовать" . Открытая группа . 2013 . Проверено 23 июля +2016 . Эта спецификация требует, чтобы действие функции было атомарным.
  10. Сэм Варшавчик (25 июля 2016 г.). «Управление майлдирскими структурами» . курьеры-пользователи (Список рассылки) . Проверено 26 июля +2016 .
  11. ^ Сирайнен, Тимо (2006-12-05). «Отличие от 'MailboxFormat / Maildir ' » . Проверено 23 ноября 2018 .
  12. ^ mutt maildir support: обходной путь для файловых систем, которые не принимают двоеточия
  13. ^ "aerc - лучшая в мире домашняя страница почтового клиента" . aerc-mail.org .
  14. ^ "Небольшая домашняя страница почтовой системы" . notmuchmail.org . Проверено 22 июня 2019 .
  15. ^ «Maildir в Thunderbird» . mozilla.org . Проверено 6 декабря 2020 .

См. Также [ править ]

  • mbox
  • Система обработки сообщений MH
  • MIX (электронная почта)

Внешние ссылки [ править ]

  • страница руководства для maildir
  • maildir технические характеристики