mbox

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

mbox — общее название форматов файлов, используемых для хранения сообщений электронной почты. Все сообщения в почтовом ящике формата mbox находятся в одном текстовом файле. Начало почтового сообщения определяется строкой из 5 символов: словом «From» с последующим пробелом. В конце каждого сообщения находится пустая строка.

Формат mbox популярен до сих пор из-за удобства применения с программами обработки текста.

В отличие от протоколов интернета, используемых для обмена сообщениями, формат хранения электронных сообщений не был введён посредством RFC, а создавался разработчиками ПО для работы с электронной почтой.

В mbox (RFC 4155) сообщения хранятся в файлах, напрямую доступных пользователям, в оригинальном формате Internet Message (RFC 2822). Так же, как и в другой форме почтовых ящиков MH Message Handling System. Иные системы, такие как Microsoft Exchange Server и Cyrus IMAP server хранят почтовые ящики в централизованных базах данных, обслуживаемых почтовой системой и недоступных пользователям напрямую.

Альтернативой mbox часто называется формат хранения электронных сообщений maildir.

Семейство форматов[править | править вики-текст]

Существует четыре несовместимых между собой формата mbox: mboxo, mboxrd, mboxcl и mboxcl2, происходящих из разных версий Unix. Схема наименования была разработана Daniel J. Bernstein, Rahul Dhesi и другими в 1996 году. mboxcl и mboxcl2 берут начало из формата файлов, используемых почтовыми программами Unix System V Release 4. mboxrd был разработан Rahul Dhesi с соавторами как улучшенный вариант mboxo, впоследствии был адаптирован для использования некоторыми почтовыми программами Unix, включая qmail (ориг.: «and subsequently adopted by some Unix mail tools including qmail»).

mboxo и mboxrd определяют начало нового сообщения по строке, начинающейся со слова From, которое может содержаться как в заголовке почтового сообщения, так и в его теле (старая ошибка стандарта электронной почты, возможно, актуальная до сих пор) (ориг.: «a mail standard violation for the former, but likely for the latter»). Перед сохранением в почтовом ящике формата mbox строки тела сообщения, начинающиеся со слова «From», должны быть предварены символом «больше»:

   >From my point of view...

,что в формате mbox может привести к повреждению сообщения: если символ «больше» уже есть в начале строки перед «From», он оставляется без изменений. В дальнейшем, при чтении электронной почты, программа ошибочно удаляет начальный знак «>». Формат mboxrd решает эту проблему заменой From на >From и >From на >>From. Такое преобразование всегда обратимо.[1]

Пример:

Форматы mboxcl и mboxcl2 используют заголовок «Content-Length:» для определения длины сообщения и нахождения «настоящих» полей From. mboxcl всё ещё использует «>» для экранирования From, в mboxcl2 — нет.

Изменённый mbox[править | править вики-текст]

Некоторые программы используют для своих нужд модификации mbox.

  • почтовый клиент Eudora использует изменённый вариант mboxo, в котором адрес отправителя заменён строкой «???@???». Большинство программ помещают письма в mbox в неизменном виде. Eudora хранит вложения в виде файлов в отдельном каталоге.[2]
  • программы семейства Mozilla (Mozilla, Netscape, Thunderbird и другие) используют вариант mboxrd с усложнёнными правилами экранирования строк «From».[3]

Блокировка файлов[править | править вики-текст]

Варианты mbox используют разные, несовместимые между собой механизмы блокировки файлов: fcntl(), lockf(), «dot locking». Это ненадёжно при использовании сетевых файловых систем, например, NFS.[источник не указан 1402 дня]

Блокировка файлов необходима потому, что множество сообщений хранится в одном файле, который может быть повреждён при одновременной попытке записи несколькими программами. Такое может произойти, если программа доставки электронной почты добавляет новые сообщения в тот момент, когда программа чтения почты удаляет старое сообщение.

Рекомендуется блокировать файлы mbox даже при простом чтении почты. Иначе можно увидеть повреждённое сообщение, если другой процесс изменяет файл в это время.

См. также[править | править вики-текст]

References[править | править вики-текст]