Provided by: manpages-pl_20060617-1_all bug

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)