mbox(5)

NAZWA
mbox - plik zawierający wiadomości pocztowe

WPROWADZENIE
Najpopularniejszym formatem przechowywania wiadomości pocztowych jest format mbox. mbox jest pojedynczym plikiem zawierającym zero lub więcej listów.

FORMAT WIADOMOŚCI
List zakodowany w formacie mbox zaczyna się od linii From_, po której występuje ciąg linii innych niż From_ a kończy pustą linią. Linia From_ oznacza dowolną linię zaczynającą się znakami F, r, o, m, spacja:
         From god@heaven.af.mil Sat Jan  3 01:05:34 1996
         Return-Path: <god@heaven.af.mil>
         Delivered-To: djb@silverton.berkeley.edu
         Date: 3 Jan 1996 01:05:34 -0000
         From: God <god@heaven.af.mil>
         To: djb@silverton.berkeley.edu (D. J. Bernstein)
         How's that mail system project coming along?
Ostatnia linijka jest całkiem pusta (bez spacji czy tabulacji). Zauważ, że puste linie mogą się też pojawić w dowolnym innym miejscu listu. Linia From_ zawsze ma postać From nadkopert data dalsze_info. nadkopert jest jednym wyrazem, bez spacji czy tabulacji. Jest to zwykle nadawca z koperty (envelope sender) listu. data jest datą dostarczenia listu. Zawiera zawsze dokładnie 24 znaki w formacie asctime. dalsze_info jest opcjonalne i może zawierać dowolne informacje. Pomiędzy linią From_ a pustą linią jest wiadomość w formacie RFC 822 , jak to opisano w qmail-header(5), podlegającą cytowaniu >From, jak opisano poniżej.

JAK LIST JEST DOSTARCZANY
Oto, w jaki sposób program dopisuje list do pliku mbox. Najpierw tworzy linię From_ z danym nadawcą kopertowym listu i bieżącą datą. Jeśli nadawca kopertowy jest pusty (tzn. jeśli jest to poczta odbita), to zamiast tego program używa nazwy MAILER-DAEMON. Jeśli nazwa nadawcy kopertowego zawiera spacje, tabulacje lub znaki nowej linii, to są one zamieniane na myślniki. Następnie program kopiuje wiadomość, do każdej linii stosując cytowanie >From . Takie postępowanie zapewnia, iż powstałe linie nie będą liniami From_: program poprzedza znakiem większości > wszystkie linie From_, >From_, >>From_, >>>From_, itd. Na koniec do wiadomości dopisywana jest pusta linia. Jeśli ostatnia linia była linią częściową [tj. nie zakończoną znakiem nowej linii - tłum.], to zapisywane są dwa znaki nowej linii. W przeciwnym razie - jeden.

JAK LIST JEST CZYTANY
Czytnik przegląda plik mbox szukając linii From_. Każda taka linia oznacza początek wiadomości. Czytnik nie powinien próbować wykorzystywać tego, że każda linia From_ (poza początkiem pliku) jest poprzedzana linią pustą. Po znalezieniu listu, czytnik wydziela z linii From_ nazwę nadawcy kopertowego (może być uszkodzona) i datę dostarczenia. Następnie czyta aż do następnej linii From_ lub do końca pliku, zależy co wystąpi wcześniej. Odcina ostatnią pustą linię i usuwa cytowania z linii >From_, >>From_ i tak dalej. Wynikiem jest wiadomość zgodna z RFC 822.

POPULARNE ODMIANY MBOX
Istnieje wiele odmian formatu mbox. Wariant opisany powyżej jest formatem mboxrd, spopularyzowanym przez Rahula Dhesi w czerwcu 1995. Oryginalny format mboxo cytuje tylko linie From_, nie >From_. W rezultacie nie sposób powiedzieć, czy
         From: djb@silverton.berkeley.edu (D. J. Bernstein)
         To: god@heaven.af.mil
         >From now through August I'll be doing beta testing.
         Thanks for your interest.
było cytowane w oryginalnym liście. Czytnik mboxrd zawsze usunie cytowanie. Format mboxcl przypomina mboxo, ale zawiera pole Content-Length z liczbą bajtów wiadomości. Format mboxcl2 jest taki jak mboxcl, ale nie ma żadnego cytowania >From. Te formaty są stosowane przez programy przesyłające pocztę w SVR4. mboxcl2 nie może być bezpiecznie czytane przez czytniki mboxrd.

NIE SKONKRETYZOWANE SZCZEGÓŁY
Istnieje wiele mechanizmów blokowania plików mbox. qmail-local zawsze używa flock na systemach, które go mają, w przeciwnym razie lockf. Data dostarczenia w linii From_ nie podaje strefy czasowej. qmail-local zawsze tworzy datę dostarczenia w GMT, dzięki czemu pliki mbox można bezpiecznie przenosić z jednej strefy czasowej do innej. Jeśli mtime [czas modyfikacji] niepustego pliku mbox jest większe niż atime [czas dostępu], to plik zawiera nowe listy. Jeśli mtime jest większe niż atime, to nowa poczta została przeczytana. Jeżeli mtime jest równe atime, nie da się w żaden sposób stwierdzić czy w pliku są nowe wiadomości, gdyż uruchomienie qmail-local zabiera dużo mniej niż sekundę. Jednym z rozwiązań jest sztuczne nadawanie przez czytnik czasowi atime wartości mtime plus 1. Wówczas plik zawiera nowe listy wtedy i tylko wtedy, gdy atime jest mniejsze bądź równe mtime. Niektóre czytniki umieszczają w każdej wiadomości pole Status, wskazujące, które listy zostały już przeczytane.

ZOBACZ TAKŻE
maildir(5), qmail-header(5), qmail-local(8)