Provided by:
manpages-pl_20051117-1_all 
NAZWA
maildir - katalog na przychodzące wiadomości pocztowe
WPROWADZENIE
maildir jest strukturą drzewiastą katalogów listów przychodzących.
Rozwiązuje problemy niezawodności, jakie trapiły pliki mbox i katalogi
pocztowe mh.
KWESTIE NIEZAWODNOŚCI
Podczas przekazywania listu może nastąpić załamanie się systemu. W
przypadku plików mbox, jak i katalogów mh list ten zostanie wówczas
milcząco obcięty. Co gorsza: przy formacie mbox, jeśli list zostanie
ucięty w środku linii, to milcząco zostanie złączony z następnym.
Agent transportu poczty (MTA) będzie później próbował ponownie
dostarczyć list, ale jest niedopuszczalne, żeby popsuta wiadomość w
ogóle się pojawiała. W maildir każdy list po przesłaniu jest z
pewnością kompletny.
Na danej maszynie mogą równocześnie pracować dwa programy dostarczające
pocztę do tego samego użytkownika. Formaty mbox i mh wymagają, by oba
programy aktualizowały jeden centralny plik. Jeśli nie korzystają one z
jakiegoś mechanizmu blokowania, to plik ten zostanie uszkodzony.
Istnieje kilka mechanizmów blokowania mbox i mh, z których żaden nie
działa przenośnie i niezawodnie. W przeciwieństwie do tego, przy
maildir żadne blokady nie są nigdy potrzebne. Różne procesy
dostarczania nigdy nie tykają tego samego pliku.
Użytkownik może próbować usunąć listy ze swojej skrzynki w tej samej
chwili, gdy maszyna dostarcza nowy list. Przy formatach mbox i mh
czytnik poczty użytkownika musi wiedzieć, jakiego mechanizmu blokowania
używają programy dostarczające pocztę. Inaczej jest w przypadku
maildir, gdzie czytnik poczty może bezpiecznie aktualizować lub usuwać
dowolny dostarczony list.
Wiele ośrodków korzysta z Sunowego Network Failure System (NFS),
zapewne dlatego, że dostawca systemu operacyjnego nie oferuje niczego
innego. NFS pogarsza wszystkie powyższe problemy. Niektóre z
implementacji NFS nie zapewniają żadnego solidnego mechanizmu
blokowania. Przy formatach mbox i mh, gdy dwie maszyny dostarczają
pocztę do tego samego użytkownika lub gdy użytkownik czyta pocztę
gdzieś poza maszyną dostarczającą, jego poczta jest zagrożona. maildir
działa z NFS bez kłopotów.
STRUKTURA MAILDIR
Katalog w formacie maildir ma trzy podkatalogi, wszystkie na tym samym
systemie plików: tmp, new i cur.
Każdy plik w new jest świeżo dostarczonym listem. Czas modyfikacji
pliku jest czasem dostarczenia. List jest dostarczany bez dodatkowej
linii From_ w stylu UUCP, bez żadnego cytowania >From i bez dodatkowej
pustej linii na końcu. Wiadomość ma normalnie format RFC 822,
zaczynając się liniami Return-Path i Delivered-To, ale może zawierać
dowolne dane binarne. Może nawet nie kończyć się znakiem nowej linii.
Pliki w cur są takie jak w new. Różnicę stanowi to, że pliki w cur nie
są już nowymi listami: czytnik poczty użytkownika już je widział.
JAK LIST JEST DOSTARCZANY
Do zapewnienia niezawodności dostarczania wykorzystuje się katalog tmp.
Program dostarcza przesyłkę pocztową w sześciu etapach. Najpierw,
wykonuje chdir() do katalogu maildir. Potem pobiera za pomocą stat()
informacje o pliku o nazwie tmp/time.pid.host, gdzie time to liczba
sekund od początku 1970 GMT, pid to identyfikator procesu programu, a
and host jest nazwą hosta. W kroku trzecim, jeśli stat() zwrócił coś
innego niż ENOENT [ENOENT=plik nie istnieje], program zasypia na dwie
sekundy, aktualizuje time, i ponownie próbuje stat(), ograniczoną
liczbę razy. W czwartym kroku program tworzy tmp/time.pid.host. W
piątym zapisuje przez zapis-NFS przesyłkę do utworzonego pliku. W
szóstym kroku program, za pomocą link() tworzy nowe dowiązanie tego
pliku, new/time.pid.host. W tym momencie list dostał pomyślnie
dostarczony.
Program dostarczający przed utworzeniem tmp/time.pid.host powinien
uruchomić 24-godzinny licznik czasu i porzucić dostarczanie jeśli
licznik zostanie przekroczony. W przypadku wystąpienia błędu,
przekroczenia limitu czasu czy normalnego zakończenia działania,
program może spróbować użyć unlink() do usunięcia tmp/time.pid.host.
Zapis-NFS oznacza (1) jak zwykle, sprawdzenie liczby bajtów zwracanych
z każdego wywołania write(); (2) wywołanie fsync() i sprawdzenie
zwróconej wartości; (3) wywołanie close() i sprawdzenie zwróconej
wartości. (Standardowe implementacje NFS obsługują fsync()
niepoprawnie, ale poprawiają to niewłaściwym użyciem close().)
JAK LIST JEST CZYTANY
Czytnik poczty działa jak następuje.
Przegląda katalog new szukając nowych wiadomości. Powiedzmy, że mamy
nowy list, new/unikat. Czytnik może swobodnie wyświetlić zawartość
pliku new/unikat, usunąć go lub zmienić mu nazwę na cur/unikat:info.
Znaczenie info opisano na stronie
http://pobox.com/~djb/proto/maildir.html.
Oczekuje się również, że czytnik przeglądnie katalog tmp i wyczyści
ewentualne znalezione tam stare pliki. Plik w tmp można bezpiecznie
usunąć jeśli nie sięgano do niego w ciągu ostatnich 36 godzin.
Warto, by czytniki pomijały wszystkie te pliki w new i cur, których
nazwy zaczynają się od kropki. Czytniki nie powinny próbować analizować
innych nazw plików.
ZMIENNE ŚRODOWISKOWE
Czytniki poczty obsługujące maildir korzystają ze zmiennej
środowiskowej MAILDIR jako nazwy podstawowego katalogu pocztowego
użytkownika.
ZOBACZ TAKŻE
mbox(5), qmail-local(8)
maildir(5)