NAZWA¶
maildir - katalog na przychodzące wiadomości pocztowe
WPROWADZENIE¶
Uwaga! To tłumaczenie może być nieaktualne!
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
Failur 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 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)
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 5 maildir
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.