Scroll to navigation

PROCMAIL(1) General Commands Manual PROCMAIL(1)

NAZWA

procmail - autonomiczny procesor poczty

SKŁADNIA

procmail [-ptoY] [-f od_kogo] [parametr=wartość | plik_rc] ...
procmail [-toY] [-f fromwhom] [-a argument] ... -d odbiorca ...
procmail [-ptY] -m [parametr=wartość] ... rcfile [argument] ...
procmail -v

OPIS

Szybką orientację w temacie można uzyskać, czytając umieszczone na końcu UWAGI.

Procmail powinien być wywoływany automatycznie, korzystając z mechanizmu .forward w momencie przybycia listu. Alternatywnie, gdy jest zainstalowany przez administratora systemu, może być wywoływany bezpośrednio przez program pocztowy (mailer). Po wywołaniu, najpierw ustawia na wartości domyślne pewne zmienne środowiskowe, odczytuje wiadomość pocztową ze stdin (do EOF), oddziela jej treść od nagłówka, a następnie, jeśli nie podano argumentów wiersza poleceń, zaczyna szukać pliku o nazwie $HOME/.procmailrc. Stosownie do reguł przetwarzania zawartych w tym pliku świeżo otrzymana wiadomość pocztowa zostaje umieszczona we właściwym katalogu. Jeśli nie istnieje plik rc, lub jego przetwarzanie dojdzie do końca, procmail zapisze wiadomość w domyślnej skrzynce pocztowej (mailbox) systemu.

Jeśli nie podano ani pliku rc, ani opcji -p w wierszu poleceń, to program przed odczytaniem $HOME/.procmailrc zinterpretuje polecenia zawarte w /etc/procmailrc (o ile istnieją). Podczas tworzenia /etc/procmailrc trzeba uważać, ponieważ jeśli warunki na to pozwolą, zostanie on uruchomiony z prawami administratora (w przeciwieństwie do pliku $HOME/.procmailrc).

Jeśli procmail zostanie uruchomiony z uprawnieniami roota lub jako suid root, to może pracować jako agent dostarczania poczty (mail delivery agent), z poszerzonymi możliwościami, wstecznie zgodny.

Można go też wykorzystywać jako uniwersalny filtr pocztowy, tzn. poczyniono pewne kroki, by procmail mógł być wywoływany w specjalnej regule programu sendmail(8).

Format pliku rc jest opisany szczegółowo na stronie podręcznika procmailrc(5).

Technika punktów ważonych jest opisana szczegółowo na stronie procmailsc(5).

Przykłady plików rc można obejrzeć na stronie procmailex(5).

Sygnały

Kończy przedwcześnie i ponownie kolejkuje wiadomość.
Kończy przedwcześnie i odbija wiadomość do nadawcy.
Kończy przedwcześnie i odbija wiadomość do nadawcy.
Kończy przedwcześnie i milcząco traci wiadomość.
Wymusza przekroczenie limitu czasu (zobacz TIMEOUT).
Odpowiednik VERBOSE=off.
Odpowiednik VERBOSE=on.

OPCJE

Procmail wypisuje swój numer wersji, wyświetla wkompilowaną konfigurację i kończy działanie.
Zachowuje stare środowisko. Normalnie procmail czyści środowisko podczas startu, poza wartością zmiennej TZ. Jednak w każdym wypadku: wszelkie wartości domyślne przesłonią uprzednio istniejące zmienne środowiskowe, tzn. procmail nie będzie zwracał uwagi na żadne predefiniowane zmienne środowiskowe, lecz nadpisze je swoimi wartościami domyślnymi. Listę zmiennych środowiskowych procmaila można znaleźć na stronie podręcznika procmailrc(5). Jeśli podano zarówno -p, jak i -m, lista ustawianych zmiennych ogranicza się do zaledwie: LOGNAME, HOME, SHELL, ORGMAIL i MAILDIR.
Powoduje, że procmail zawodzi łagodnie, np. jeśli nie może dostarczyć przesyłki do żadnego z podanych mu celów, wiadomość nie zostanie odbita, lecz powróci do kolejki poczty. W przyszłości zostanie dokonana ponowna próba dostarczenia.
Powoduje, że procmail ponownie generuje początkową linię "From " z wartością fromwhom jako wysyłającym (zamiast -f można użyć alternatywnego i przedawnionego -r). Jeśli fromwhom składa się z pojedynczego "-", to program tylko odświeży znacznik czasu w linii "From " (o ile jest obecny, jeśli nie, to utworzy nowy).
Zamiast pozwolić komukolwiek na generowanie linii "From ", po prostu przesłoni fałszywki.
Zakłada, że do mamy czynienia z tradycyjnym Berkeley'owskim formatem mailboxa, ignoruje wszelkie pola Content-Length:.
Ustawia $1 na wartość argumentu. Każde następne -a argument ustawią zmienną o kolejnym numerze ($2, $3 itd.). Może być używane do przekazywania metainformacji do procmaila. Zazwyczaj wykonuje się to przez przesyłanie informacji $@x z reguły programu sendmail(8).
Włącza jawny tryb dostarczania. Dostarczenie nastąpi do lokalnego odbiorcy, oznaczonego jako odbiorca. Jest to oczywiście możliwe tylko, jeśli procmail ma prawa roota (lub efektywne prawa euid i egid odbiorcy). Procmail będzie się suidował do podanych odbiorców i dostarczał pocztę tak, jakby został wywołany przez danego odbiorcę bez argumentów (tzn. jeśli nie znaleziono pliku rc, dostarczanie zachodzi jak w zwyczajnej poczcie). Opcja ta jest niezgodna z -p.
Zmienia procmail w filtr pocztowy ogólnego przeznaczenia. W tym trybie trzeba przekazać jeden plik rc w wierszu poleceń. Po pliku rc procmail przyjmie nieograniczoną liczbę argumentów. Jeśli plik rc jest nazwą ze ścieżką absolutną, zaczynającą się od /etc/procmailrcs/, bez odwołań wstecznych (np. katalog nadrzędny nie może być wymieniony), to procmail spróbuje, jeżeli nie napotka naruszeń bezpieczeństwa, zidentyfikować właściciela tego pliku (lub dowiązania symbolicznego). Zaawansowane zastosowania tej opcji można znaleźć w rozdziale PRZYKŁADY poniżej.

ARGUMENTY

Wszelkie argumenty zawierające "=" są uważane za przypisania wartości zmiennym środowiskowym. Wszystkie one zostaną obliczone po przypisaniu wartości domyślnych, a przed otwarciem pierwszego pliku rc.

Wszelkie inne argumenty są uważane za ścieżki pliku rc: albo absolutne, albo względne, w odniesieniu do bieżącego katalogu, jeśli zaczynają się od "./". Wszelkie inne ścieżki względne są uważane za podane względem katalogu $HOME, chyba że użyto opcji -m. Wówczas wszystkie ścieżki względne odnoszą się do bieżącego katalogu. Procmail zacznie od pierwszej ścieżki, którą znajdzie w wierszu poleceń. Następne zostaną przetworzone tylko wtedy, jeśli poprzednie nie mają odpowiadającego wpisu HOST-directive, lub w wypadku, gdy nie istnieją.

Jeśli nie poda się plików rc, procmail zagląda do $HOME/.procmailrc. Jeśli nawet tego nie dało się znaleźć, przetwarzanie będzie kontynuowane zgodnie z domyślnymi ustawieniami zmiennych środowiskowych i zmiennych podanych w wierszu poleceń.

PRZYKŁADY

Przykłady plików rc można obejrzeć na stronie procmailex(5). Mały fragment pliku rc można znaleźć w sekcji UWAGI, poniżej.

Pomiń resztę tej sekcji, chyba że jesteś administratorem, który ma jakieś pojęcie o składni sendmail.cf.

Opcja -m jest zazwyczaj używana, gdy procmail jest wywoływany przez regułę pliku sendmail.cf. Aby móc tego dokonać, dobrze jest utworzyć dodatkowy wpis o programie dostarczającym pocztę "procmail" w pliku sendmail.cf (poza już obecnym mailerem "local", który uruchamia procmaila). Aby utworzyć taki wpis, sugerujemy coś takiego:

Mprocmail, P=/usr/bin/procmail, F=mSDFMhun, S=11, R=21,

A=procmail -m $h $f $u

Umożliwi to wykorzystanie do filtrowania poczty poprzez mailer procmail reguł podobnych do poniższej (prawdopodobnie w zestawie reguł (ruleset) 0). Prosimy zwrócić uwagę na początkową tabulację oznaczającą kontynuację reguły i tabulację służącą do oddzielenia komentarzy:

R$*<@some.where>$*

$#procmail $@/etc/procmailrcs/some.rc $:$1@some.where.procmail$2 R$*<@$*.procmail>$*
$1<@$2>$3 Już przefiltrowane, odwzoruj z powrotem

A plik /etc/procmailrcs/some.rc może być taki:

SENDER = "<$1>" # poprawienie pustego adresu nadawcy SHIFT = 1 #
usunięcie go z $@
:0 # Spuść do muszli całą pocztę śmieciową * ^Subject:.*junk /dev/null
:0 w # przekaż resztę przesyłek dalej ! -oi -f "$SENDER" "$@"

Należy uważać, gdy z wnętrza pliku /etc/procmailrcs/some.rc wysyłane będą listy: jeśli wyśle się je na adresy, które odpowiadają znowu pierwszej regule, można utworzyć nieskończoną pętlę.

PLIKI

/etc/passwd
do ustawiania domyślnych wartości zmiennych LOGNAME, HOME i SHELL odbiorcy
/var/mail/$LOGNAME
systemowa skrzynka pocztowa; zarówno skrzynka systemowa, jak i katalog, w którym się ona znajduje, będą tworzone za każdym razem, gdy procmail startuje, a któreś z nich nie istnieje
/etc/procmailrc
początkowy ogólnosystemowy plik rc
/etc/procmailrcs/
ścieżka specjalnych uprawnień do plików rc
$HOME/.procmailrc
domyślny plik rc
/var/mail/$LOGNAME.lock
plik blokujący systemowej skrzynki pocztowej (nie jest automatycznie używany przez procmail, chyba że $DEFAULT jest równe /var/mail/$LOGNAME, a procmail dostarcza coś do $DEFAULT)
/usr/sbin/sendmail
domyślny program ekspedycji poczty (forwarder)
_????`hostname`
tymczasowe "unikatowe" pliki zerowej długości tworzone przez procmail

ZOBACZ TAKŻE

procmailrc(5), procmailsc(5), procmailex(5), sh(1), csh(1), mail(1), mailx(1), uucp(1), aliases(5), sendmail(8), egrep(1), grep(1), biff(1), comsat(8), lockfile(1), formail(1), cron(1)

DIAGNOSTYKA

Skrzynka systemowa miała ustawiony bit suid lub sgid, procmail kończy z błędem EX_NOUSER, zakładając że do tej skrzynki nie wolno dostarczać poczty.
Nie podano prawidłowej nazwy zmiennej środowiskowej.
Nie było odpowiadającego nawiasu otwierającego (zagnieżdżenie bloku).
Nie wszystkie kombinacje opcji są użyteczne
Flaga x nie da się pogodzić z innymi flagami tej reguły.
Brakowało skrzynki systemowej i nie dało się jej było utworzyć.
W katalogu pocztowym "x" brakuje jednego lub więcej koniecznych podkatalogów, a procmail nie mógł ich utworzyć.
Wystąpił błąd w mechanizmie dostarczania wiadomości do katalogu pocztowego "x".
Nie znaleziono przekierowań ">>", używanie pliku o nazwie "$LOCKEXT" jako lokalnego pliku blokującego (locallockfile).
Procmail nie był w stanie otworzyć pliku rc albo nie był to zwyczajny plik lub też program nie mógł otworzyć katalogu MH, by znaleźć plik o najwyższym numerze.
Plik blokujący już zniknął lub odebrano prawa zapisu do jego katalogu.
Lokalny plik blokujący (locallockfile) podany w tej regule jest równy nadal aktywnemu $LOCKFILE.
Procmail nie przybierze tożsamości narzucanej mu plikiem rc, ponieważ wykryto pogwałcenie bezpieczeństwa (np. -p lub przypisania zmiennych w wierszu poleceń) albo program miał zbyt małe uprawnienia by móc to zrobić.
Podczas startu procmaila nie były przyłączone stdin, stdout lub stderr (prawdopodobnie próba złamania bezpieczeństwa).
Systemowa skrzynka pocztowa odbiorcy była niezabezpieczona, procmail ją zabezpieczył.
Nieistniejący katalog, brak praw zapisu, padł potok lub przepełniony dysk.
Wykryto przepełnienie bufora, LINEBUF był zbyt mały, ustawiono zmienną PROCMAIL_OVERFLOW.





Pełna ścieżka do podanego elementu, po rozwinięciu wszystkich linków, ma długość większą niż LINEBUF lub nie zaczyna się od znaku separatora plików.
Program lub filtr "x" próbował wyprodukować zbyt wiele wyjścia dla bieżącego bufora LINEBUF, reszta została pominięta i ustawiono zmienną PROCMAIL_OVERFLOW.
Linia akcji lub inne flagi tej reguły odbierają fladze x znaczenie.
Tabela procesów jest pełna (i wykorzystano RORESRETRY).
Program nie znajduje się w ścieżce lub nie jest wykonywalny.
Brak praw zapisu do katalogu, w którym znajduje się plik blokujący lockfile "x", albo w tym samym czasie próbuje wymusić blokowanie więcej niż jeden procmail.
Plik lockfile "x" zostanie usunięty siłą, ponieważ nastąpiło przekroczenie limitu czasu (zobacz także: LOCKTIMEOUT).
Znaleziono początek reguły, lecz nie została zakończona przed napotkaniem końca pliku.
Procmail wymaga uprawnień roota lub musi mieć określony (e)udi, (e)gid w trybie dostarczania. Wiadomości będą odbijane (zwracane nadawcy).
Wyrażenie regularne "x" zawiera błędy (najprawdopodobniej brakujące lub nadmiarowe nawiasy).
Podczas próby użycia obsługiwanych przez jądro wywołań blokujących, któreś z nich nie powiodło się (zwykle wskazuje to na błąd systemu), procmail ignoruje ten błąd i działa dalej.
Zobacz wyżej.
Może się pojawić tylko jeśli podasz jakieś naprawdę dziwne (i niedozwolone) nazwy plików blokujących, lub jeśli nie można było utworzyć pliku lockfile z powodu braku uprawnień lub nieistniejących podkatalogów.
Procmail próbował sklonować się, lecz nie mógł znaleźć pliku rc "x" (został przeniesiony lub był ścieżką względną, a zmieniłeś katalog od ostatniego otwarcia go przez procmaila).
Bieżąca reguła nie jest kompletna.
Rozpoczęto zagnieżdżony blok, ale go nie zakończono.
Opcja -f wymaga dodatkowego argumentu.
Podano opcję -a, lecz zapomniano o argumencie.
Podano opcję -m, procmail oczekuje nazwy pliku rc jako argumentu.
Podano opcję -d lub wywołano procmail pod inną nazwą, program oczekuje przynajmniej jednego odbiorcy jako argumentu.
System plików zawierający "x" nie ma dość wolnego miejsca, aby umożliwić dostarczenie wiadomości do pliku.
Systemowi brakuje pamięci w przestrzeni wymiany (swap) (i wyczerpano NORESRETRY).
Nierozpoznane opcje wierszu poleceń są ignorowane, kontynuowanie jak zwykle.
Program uruchomiony przez procmaila zwrócił kod nnn zamiast EXIT_SUCCESS (=0); Jeśli nnn jest ujemne, to jest to sygnałem, że program umarł.
Ograniczenie wielkości pliku (quota) w systemie plików odbiorcy zawierającym "x" nie pozwala na dostarczenie danej wiadomości do pliku.
Systemowa skrzynka pocztowa odbiorcy okazała się być zmyślona, procmail wykonał działania wymijające.
Filtr zakończył pracę niepomyślnie, procmail próbował odzyskać oryginalny tekst.
Program nie mógł nic zrobić z "x" w pliku rc (błąd składni), ignoruje to.
Właściciel pliku rc nie był odbiorcą ani rootem, plik był dostępny do zapisu dla wszystkich, lub zawierający go katalog był zapisywalny dla wszystkich, lub był to domyślny plik rc ($HOME/.procmailrc) i albo ten plik, albo zawierający go katalog były zapisywalne przez grupę (plik rc nie został użyty).
Procmail otrzymał sygnał podczas oczekiwania na ...
W filtrze lub programie "x" nastąpiło przekroczenie limitu czasu.
W programie, filtrze lub pliku "x" nastąpiło przekroczenie limitu czasu. Jeśli był to program lub filtr, to wygląda na to, że już nie działa.
Plik nie mógł być szczęśliwie dostarczony, więc został skrócony do poprzedniej wielkości.
"x" nie wydaje się być prawidłową nazwą pliku lub plik nie jest pusty.
Albo przyrostek katalogu "x" wskazuje na to, że powinien to być MH lub katalog wiadomości pocztowych (maildir), albo został on wymieniony jako drugi katalog, do którego należy wykonać dowiązanie, ale już istnieje i nie jest to katalog.
Brak zamykającego cytatu lub próba ucieczki EOF.
Podany odbiorca nie ma odpowiadającego mu uid.

ROZSZERZONA DIAGNOSTYKA

Rozszerzoną diagnostykę można włączać i wyłączać ustawieniem zmiennej VERBOSE.

[pid] time & date
Pid i timestamp procmaila. Generowane za każdym razem gdy procmail loguje diagnostykę, gdy upłynęła chociaż sekunda od ostatniego timestampu.
Procmail próbuje zablokować przez jądro ostatnio otwarty plik (deskryptor).
Przyznanie wartości zmiennej środowiskowej.
Porzucenie wszystkich uprawnień (jeśli jakieś były), bezwarunkowo wyłącza rozszerzoną diagnostykę.
Katalog spool poczty nie był dostępny procmailowi, bazował wyłącznie na blokadach jądra.
Uruchamianie programu "x"; jeśli jest on uruchamiany bezpośrednio przez procmaila (bez pośredniej powłoki), procmail pokaże gdzie oddzielił argumenty poprzez wstawienie przecinków.
Ten komputer był nazwany "x", a zmienna HOST zawierała coś innego.
Tworzenie pliku blokującego "x".
Tworzenie dowiązania twardego pomiędzy folderami katalogów.
Trafiony warunek.
Przyznano "x" wartość MATCH.
Warunek nie pasował, reguła pominięta.
Program uruchomiony przez procmaila jako warunek lub akcja przepisu z flagą "W" zwrócił nnn zamiast EXIT_SUCCESS (=0); sposób użycia wskazuje na to, że nie jest to niespodziewana okoliczność.
Wysłano informację do comsat(1)/biff(1), że pojawiła się poczta dla użytkownika $LOGNAME pod "offsetem" w pliku "file".
Otwieranie pliku "x" dla dopisywania.
Plik rc zmieniony na "x".
Podczas próbowania różnych metod blokowania, jedna z nich się nie powiodła. Procmail będzie iterował od nowa, aż wszystkie się nie powiodą.
Ten warunek dołożył "dodatkowe" punkty, co dało w wyniku "nową sumę" punktacji.
Ponowne usuwanie pliku blokującego (lockfile) "x".

OSTRZEŻENIA

Powinieneś utworzyć skrypt powłoki, który używa lockfile(1) zanim wywołasz swoją powłokę pocztową na którymkolwiek pliku skrzynki pocztowej, innym niż skrzynka systemowa (chyba że Twoja powłoka pocztowa używa tych samych plików blokujących (lokalnych lub globalnych), które podałeś w pliku rc).

W rzadkich przypadkach, gdy trzeba zabić procmaila zanim zakończy działanie, należy użyć zwykłego polecenia kill(1) (a nie "kill -9", zobacz rozdział Sygnały dla sugestii), inaczej niektóre pliki blokujące (lockfiles) mogą nie zostać usunięte.

Należy być ostrożnym podczas używania opcji -t, jeśli procmail jest ciągle niezdolny do dostarczenia poczty (np. przez nieprawidłowy plik rc), kolejka poczty systemu może się przepełnić. Może to zgorszyć zarówno postmastera, jak i innych użytkowników.

Plik /etc/procmailrc może być uruchamiany z prawami roota, więc należy być bardzo ostrożnym z tym, co się tam wstawia. SHELL będzie zgodny z powłoką bieżącego odbiorcy, więc jeśli procmail ma wywoływać powłokę, najlepiej ustawić tę zmienną wpierw na bezpieczną wartość. Zobacz także : DROPPRIVS.

Trzeba pamiętać, że jeśli na plikach w /etc/procmailrcs/ dozwolony jest chown(1), to mogą one być chown-owane na roota (lub kogokolwiek innego) przez ich obecnych właścicieli. Dla maksymalnego bezpieczeństwa należy się upewnić, że katalog ten jest wykonywalny tylko dla roota.

Procmail nie jest właściwym narzędziem do wspólnego użytkowania jednej skrzynki pocztowej przez wielu użytkowników, jak to występuje w przypadku, gdy jest tylko jedno konto POP dla całej poczty w całej domenie. Da się to zrobić, jeśli uda się skonfigurować MTA tak, by dodawał nagłówki z danymi odbiorcy kopertowego, dzięki którym procmail będzie wiedział, dla kogo jest dana wiadomość. Jednak zwykle nie jest to dobre rozwiązanie. Być może lepiej zbadać, czy używany MTA oferuje "tabele użytkowników wirtualnych" ("virtual user tables") lub sprawdzić np. funkcję "multidrop" (wielopunktowości) programu fetchmail(1).

USTERKI

Po usunięciu siłą pliku blokującego, procmail czeka $SUSPEND sekund zanim utworzy nowy plik blokujący, tak by inny proces, który chce usunąć stary plik blokujący nie usunął przypadkiem nowego.

Procmail używa zwykłego sygnału TERMINATE do zakończenia filtrów, które uciekły, lecz nie sprawdza, czy filtr odpowiada na sygnał. Poza tym wysyła sygnał tylko do filtra, nie do jego dzieci.

Kontynuowane pole Content-Length: nie jest prawidłowo obsługiwane.

Nowe linie osadzone w kontynuowanym nagłówku powinny być pomijane podczas dopasowywania zamiast być traktowane jako pojedyncza spacja, jak to się dzieje obecnie.

RÓŻNE

Jeśli w nagłówku istnieje pole Content-Length: a nie podano flagi -Y, procmail wykorzysta to pole do zgłoszenia właściwego rozmiaru. Procmail nie zmienia szerokości pola.

Jeśli nie ma pola Content-Length: lub jeśli podano flagę -Y, a procmail dopisuje do zwykłych folderów pocztowych, to wszelkie linie ciała wiadomości, które wyglądają jak znaki pocztowe, są poprzedzane ">" (rozbraja nieprawdziwe nagłówki pocztowe). Wyrażenie regularne używane do wyszukiwania tych znaków pocztowych to:

"\nFrom "

Jeśli nazwa celu użyta w jawnym trybie dostarczania nie figuruje w /etc/passwd, procmail zadziała tak, jakby tryb ten nie był włączony. Jeśli nie jest w jawnym trybie dostarczania, a uid, pod którym działa nie ma odpowiadającego wpisu /etc/passwd, to HOME będzie miało wartość /, LOGNAME będzie ustawione na #uid, SHELL będzie równy /bin/sh, a ORGMAIL będzie ustawione na /tmp/dead.leather.

Gdy procmail jest w jawnym trybie dostarczania, to będzie generował początkowe linie "From ", jeśli brak takowych. Jeśli linia taka już istnieje, procmail pozostawi ją bez zmian. Jeśli procmail nie jest wywołany z jednym z następujących id użytkownika lub grupy : "root", "daemon", "uucp", "mail", "x400", "network", "list", "lists" lub "news", lecz wciąż musi generować lub przyjmować nową linię "From ", to będzie generował dodatkową linię ">From ", pomagającą odróżnić fałszywe listy.

Ze względów bezpieczeństwa, w wypadkach gdy właścicielem pliku rc jest odbiorca lub root, a plik nie jest ogólnie zapisywalny, lub gdy katalog, w którym on się znajduje nie jest ogólnie zapisywalny, procmail będzie używał tylko plików rc o nazwach bezwzględnych lub wyznaczonych względem $HOME. Plik $HOME/.procmailrc ma dodatkowe ograniczenie: ani on, ani katalog, w którym się znajduje, nie mogą być zapisywalne przez grupę.

Jeśli /var/mail/$LOGNAME jest zmyśloną skrzynką (np. nie należy do odbiorcy, jest niezapisywalny, jest dowiązaniem symbolicznym lub twardym), procmail podczas startu spróbuje zmienić jego nazwę na zaczynającą się od "BOGUS.$LOGNAME." i kończącą się numerem sekwencyjnym i-węzła. Jeśli okaże się to niemożliwe, ORGMAIL nie będzie mieć wartości początkowej i wskutek tego będzie zakazywać dostarczania bez należytego pliku rc.

Jeśli /var/mail/$LOGNAME jest już prawidłową skrzynką, lecz ma zbyt słabe prawa, procmail to poprawi. Aby zapobiec temu, ustaw bity u+x.

Podczas dostarczania do katalogów (lub folderów MH), nie trzeba używać plików blokujących w celu zapobieżenia zamieszaniu powodowanemu przez kilka pracujących naraz procmaili.

Dostarczanie do folderów MH jest trochę bardziej czasochłonne niż dostarczanie do normalnych katalogów lub mailboxów, ponieważ procmail musi poszukać następnego dostępnego numeru (zamiast korzystania od razu z gotowej nazwy pliku).

Przy ogólnym niepowodzeniu, procmail zwróci EX_CANTCREAT, chyba że podana zostanie opcja -t — wówczas zwróci EX_TEMPFAIL.

Procmail skleja wszystkie kontynuowane pola nagłówkowe, żeby można było w spójniejszy sposób je "egrepować". Robi to jednak tylko wewnętrznie — podczas dostarczania poczty, łamania linii pojawią się w postaci pierwotnej.

Jeśli procmail jest wywoływany pod nazwą nie zaczynającą się od "procmail" (np. jeśli jest dowiązany do innej nazwy i wywołany pod tamtą nazwą), to włącza się w jawnym trybie dostarczania i oczekuje nazw odbiorców jako argumentów wiersza poleceń (tak, jakby było podane -d).

Powiadomienia comstat(1)/biff(1) są dokonywane za pomocą UDP. Są one wysyłane, gdy procmail generuje wpis pliku z logiem. Komunikaty powiadamiania mają następujący rozszerzony format (lub tak zbliżony, jaki tylko można uzyskać, gdy ostateczne dostarczenie nie było do pliku):

$LOGNAME@offset_wiadomości_w_mailboksie
:absolutna_ścieżka_do_mboxa

Kiedy tylko procmail otwiera plik, do którego dostarcza, używa konsekwentnie następujących, dostarczanych przez jądro, strategii blokowania : fcntl(2).

Procmail jest odporny na NFS i czysty na ósmym bicie.

UWAGI

Wywoływanie procmaila z opcją -h lub -? spowoduje wyświetlenie pomocy wiersza poleceń oraz strony skróconej instrukcji flag reguł.

Istnieje doskonałe FAQ dla początkujących dotyczące filtrów pocztowych (w szczególności procmaila). Jest prowadzone przez Nancy McGough <nancym@ii.com>, a można je otrzymać wysyłając na adres mail-server@rtfm.mit.edu list z treścią:

send usenet/news.answers/mail/filtering-faq

Jeśli procmail nie jest zainstalowany w systemie jako domyślny program dostarczania poczty (zapytaj administratora), musisz się upewnić, że jest wywoływany, gdy przybywa poczta. W tym wypadku Twój plik $HOME/.forward (uwaga, musi być dostępny do odczytu dla wszystkich) powinien zawierać poniższą linię. Upewnij się, że wstawiłeś pojedyncze i podwójne znaki cytowania i - o ile w Twoim systemie nie działa smrsh(8) (SendMail Restricted Shell) - musi to być absolutna ścieżka.

" |exec /usr/bin/procmail"

Niektóre serwery pocztowe (np. exim(8)) nie akceptują powyższej składni. W tym przypadku należy użyć:

|/usr/bin/procmail

Procmail może być też wywoływany do przetworzenia już wypełnionej skrzynki systemowej. Może to być użyteczne jeśli nie chcesz lub nie możesz używać pliku $HOME/.forward (wówczas można by wywoływać poniższy skrypt albo periodycznie z usługi cron(8), albo każdorazowo, gdy zaczynasz czytać pocztę):

#!/bin/sh
ORGMAIL=/var/mail/$LOGNAME
if cd $HOME &&

test -s $ORGMAIL &&
lockfile -r0 -l3600 .newmail.lock 2>/dev/null then
trap "rm -f .newmail.lock" 1 2 3 15
umask 077
lockfile -l3600 -ml
cat $ORGMAIL >>.newmail &&
cat /dev/null >$ORGMAIL
lockfile -mu
formail -s procmail <.newmail &&
rm -f .newmail
rm -f .newmail.lock fi exit 0

Przykładowy mały $HOME/.procmailrc:

PATH=/usr/local/bin:/usr/bin:/bin
MAILDIR=$HOME/Mail      # upewnij się, że istnieje
DEFAULT=$MAILDIR/mbox   # kompletnie opcjonalne
LOGFILE=$MAILDIR/from   # zalecane
:0:
* ^From.*berg
from_me
:0
* ^Subject:.*Flame
/dev/null

Inne przykłady reguł plików rc można obejrzeć na stronie procmailex(5).

SOURCE

Program jest częścią pakietu przetwarzania poczty procmail (v3.23pre), dostępnego pod adresem http://www.procmail.org/ lub ftp.procmail.org w pub/procmail/.

MAILINGLIST

Istnieje lista dyskusyjna dla pytań związanych z programami pakietu procmail:

<procmail-users@procmail.org>

do wysyłania pytań/odpowiedzi.

<procmail-users-request@procmail.org>
do zażądania zapisania się.


Aby być informowanym o nowych wersjach i oficjalnych łatach, należy wysłać zgłoszenie zapisania się do

procmail-announce-request@procmail.org

(jest to lista tylko do odczytu).

AUTORZY

Stephen R. van den Berg

<srb@cuci.nl>

Philip A. Guenther

<guenther@sendmail.com>

TŁUMACZENIE

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.

2001/08/27 BuGless