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]
Пример:
From MAILER-DAEMON Fri Jul 8 12:08:34 2011
From: Author <author@example.com>
To: Recipient <recipient@example.com>
Subject: Sample message 1
This is the body.
>From (should be escaped).
There are 3 lines.
From MAILER-DAEMON Fri Jul 8 12:08:34 2011
From: Author <author@example.com>
To: Recipient <recipient@example.com>
Subject: Sample message 2
This is the second body.
Форматы 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.
Блокировка файлов необходима потому, что множество сообщений хранится в одном файле, который может быть повреждён при одновременной попытке записи несколькими программами. Такое может произойти, если программа доставки электронной почты добавляет новые сообщения в тот момент, когда программа чтения почты удаляет старое сообщение.
Рекомендуется блокировать файлы mbox даже при простом чтении почты. Иначе можно увидеть повреждённое сообщение, если другой процесс изменяет файл в это время.