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 obcięty. Co
gorsza: przy formacie
mbox, jeśli list zostanie ucięty w
środku linii, to 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 przypadku
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
Fa
ilur
e 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 roku 1970 strefy czasowej GMT,
pid to identyfikator
procesu programu, a
host jest nazwą komputera. 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ć 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)
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika man
są: Wojtek Kotwica (PTM) <wkotwica@post.pl> i Robert Luberda
<robert@debian.org>.
Polskie tłumaczenie jest częścią projektu
manpages-pl; uwagi, pomoc, zgłaszanie błędów na
stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z
wersją
1.06 oryginału.