table of contents
PROCMAIL(1) | General Commands Manual | PROCMAIL(1) |
procmail - autonomiczny procesor poczty
procmail [-ptoY] [-f od_kogo]
procmail [-toY] [-f fromwhom] [-a
argument] ...
procmail [-ptY] -m
[parametr=wartość] ... rcfile
procmail -v
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 punktowania ważonego jest szczegółowo opisana na stronie
procmailsc(5).
Przykłady plików rc można obejrzeć na stronie
procmailex(5).
TERMINATE Kończy przedwcześnie i ponownie kolejkuje
wiadomość.
HANGUP Kończy przedwcześnie i odbija wiadomość do
nadawcy.
INTERRUPT Kończy przedwcześnie i odbija wiadomość do
nadawcy.
QUIT Kończy przedwcześnie i milcząco traci
wiadomość.
ALARM Wymusza przekroczenie limitu czasu (zobacz TIMEOUT).
USR1 Odpowiednik VERBOSE=off.
USR2 Odpowiednik VERBOSE=on.
-v Procmail wypisuje swój numer wersji, wyświetla
wkompilowaną konfigurację i kończy działanie.
-p 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.
-t 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.
-f fromwhom 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).
-o Zamiast pozwolić komukolwiek na generowanie linii "From
", po prostu przesłoni fałszywki.
-Y Zakłada, że do mamy czynienia z tradycyjnym Berkeley'owskim
formatem mailboxa, ignoruje wszelkie pola Content-Length:.
-a argument 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).
-d odbiorca ... 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.
-m 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.
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 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:
/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
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)
Autoforwarding mailbox found (Znaleziono skrzynkę
auto-przekazującą) 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.
Bad substitution of "x" (Złe podstawienie "x") Nie
podano prawidłowej nazwy zmiennej środowiskowej.
Closing brace unexpected (Niespodziewane zamknięcie nawiasu) Nie było
odpowiadającego nawiasu otwierającego (zagnieżdżenie
bloku).
Conflicting options (Kolidujące opcje) Nie wszystkie kombinacje opcji
są użyteczne
Conflicting x suppressed (Zlikwidowane kolidujące x) Flaga x nie da
się pogodzić z innymi flagami tej reguły.
Couldn't create "x" (Nieudane utworzenie "x") Brakowało
skrzynki systemowej i nie dało się jej było utworzyć.
Couldn't create maildir part "x" (Nieudane utworzenie części
"x" katalogu poczty) W katalogu pocztowym "x" brakuje
jednego lub więcej koniecznych podkatalogów, a procmail nie
mógł ich utworzyć.
Couldn't create or rename temp file "x" (Nieudane utworzenie lub
przemianowanie tymczasowego pliku "x") Wystąpił
błąd w mechanizmie dostarczania wiadomości do katalogu
pocztowego "x".
Couldn't determine implicit lockfile from "x" (Nie można
określić jawnego pliku blokady z "x") Nie znaleziono
przekierowań ">>", używanie pliku o nazwie "
$LOCKEXT" jako lokalnego pliku blokującego (locallockfile).
Couldn't read "x" (Nieudany odczyt "x") 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.
Couldn't unlock "x" (Nieudane odblokowanie "x") Plik
blokujący już zniknął lub odebrano prawa zapisu do jego
katalogu.
Deadlock attempted on "x" (Próba zakleszczenia na "x")
Lokalny plik blokujący (locallockfile) podany w tej regule jest
równy nadal aktywnemu $LOCKFILE.
Denying special privileges for "x" (Odmowa specjalnych uprawnień
dla "x") 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ć.
Descriptor "x" was not open (Deskryptor "x" nie był
otwarty) Podczas startu procmaila nie były przyłączone stdin,
stdout lub stderr (prawdopodobnie próba złamania
bezpieczeństwa).
Enforcing stricter permissions on "x" (Wymuszenie bardziej
restrykcyjnych uprawnień do "x") Systemowa skrzynka pocztowa
odbiorcy była niezabezpieczona, procmail ją zabezpieczył.
Error while writing to "x" (Błąd podczas zapisu do
"x") Nieistniejący katalog, brak praw zapisu, padł potok
lub przepełniony dysk.
Exceeded LINEBUF (Przekroczone LINEBUF) Wykryto przepełnienie bufora,
LINEBUF był zbyt mały, ustawiono zmienną
PROCMAIL_OVERFLOW.
MAILDIR is not an absolute path (MAILDIR nie jest ścieżką
absolutną)
MAILDIR path too long (Ścieżka MAILDIR zbyt długa)
ORGMAIL is not an absolute path (ORGMAIL nie jest ścieżką
absolutną)
ORGMAIL path too long (Ścieżka ORGMAIL zbyt długa)
default rcfile is not an absolute path (domyślny plik rc nie jest
ścieżką absolutną)
default rcfile path too long (zbyt długa ścieżka do
domyślnego pliku rc) 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.
Excessive output quenched from "x" (Stłumiono nadmierne
wyjście z "x") 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.
Extraneous x ignored (Nie związane x zignorowane) Linia akcji lub inne
flagi tej reguły odbierają fladze x znaczenie.
Failed forking "x" (Nieudane rozwidlenie "x") Tabela
procesów jest pełna (i wykorzystano RORESRETRY).
Failed to execute "x" (Nieudane wykonanie "x") Program nie
znajduje się w ścieżce lub nie jest wykonywalny.
Forced unlock denied on "x" 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.
Forcing lock on "x" Plik lockfile "x" zostanie
usunięty siłą, ponieważ nastąpiło przekroczenie
limitu czasu (zobacz także: LOCKTIMEOUT).
Incomplete recipe Znaleziono początek reguły, lecz nie została
zakończona przed napotkaniem końca pliku.
Insufficient privileges Procmail wymaga uprawnień roota lub musi mieć
określony (e)udi, (e)gid w trybie dostarczania. Wiadomości
będą odbijane (zwracane nadawcy).
Invalid regexp "x" (Niepoprawne wyraż. regularne "x")
Wyrażenie regularne "x" zawiera błędy
(najprawdopodobniej brakujące lub nadmiarowe nawiasy).
Kernel-lock failed (Błąd blokowania za pośrednictwem funkcji
jądra) 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.
Kernel-unlock failed (Błąd odblokowania za pośrednictwem funkcji
jądra) Zobacz wyżej.
Lock failure on "x" (Błąd blokowania "x")
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.
Lost "x" (Zgubiono "x") 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).
Missing action (Brak akcji) Bieżąca reguła nie jest kompletna.
Missing closing brace (Brak nawiasu zamykającego) Rozpoczęto
zagnieżdżony blok, ale go nie zakończono.
Missing name (Brak nazwy) Opcja -f wymaga dodatkowego argumentu.
Missing argument (Brak argumentu) Podano opcję -a, lecz zapomniano o
argumencie.
Missing rcfile (Brak pliku rc) Podano opcję -m, procmail oczekuje
nazwy pliku rc jako argumentu.
Missing recipient (Brak odbiorcy) Podano opcję -d lub wywołano
procmail pod inną nazwą, program oczekuje przynajmniej jednego
odbiorcy jako argumentu.
No space left to finish writing "x" (Brak miejsca na dokończenie
zapisu "x") System plików zawierający "x" nie ma
dość wolnego miejsca, aby umożliwić dostarczenie
wiadomości do pliku.
Out of memory (Brak pamięci) Systemowi brakuje pamięci w przestrzeni
wymiany (swap) (i wyczerpano NORESRETRY).
Processing continued (Kontynuowanie przetwarzania) Nierozpoznane opcje wierszu
poleceń są ignorowane, kontynuowanie jak zwykle.
Program failure (nnn) of "x" (Błąd programu (nnn) na
"x") 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ł.
Quota exceeded while writing "x" (Podczas zapisu "x"
przekroczono ograniczenie udziału dyskowego) Ograniczenie wielkości
pliku (quota) w systemie plików odbiorcy zawierającym "x"
nie pozwala na dostarczenie danej wiadomości do pliku.
Renaming bogus "x" into "x" Systemowa skrzynka pocztowa
odbiorcy okazała się być zmyślona, procmail wykonał
działania wymijające.
Rescue of unfiltered data succeeded/failed (Ratowanie nieprzefiltrowanych danych
pomyślne/nieudane) Filtr zakończył pracę
niepomyślnie, procmail próbował odzyskać oryginalny tekst.
Skipped: "x" (Pominięto: "x") Program nie
mógł nic zrobić z "x" w pliku rc (błąd
składni), ignoruje to.
Suspicious rcfile "x" (Podejrzany plik rc "x")
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).
Terminating prematurely whilst waiting for ... (Przedwczesne zakończenie
podczas oczekiwania na ...) Procmail otrzymał sygnał podczas
oczekiwania na ...
Timeout, terminating "x" W filtrze lub programie "x"
nastąpiło przekroczenie limitu czasu.
Timeout, was waiting for "x" 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.
Truncated file to former size Plik nie mógł być
szczęśliwie dostarczony, więc został skrócony do
poprzedniej wielkości.
Truncating "x" and retrying lock "x" nie wydaje się
być prawidłową nazwą pliku lub plik nie jest pusty.
Unable to treat as directory "x" (Niemożliwe traktowanie jako
katalogu "x") 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.
Unexpected EOL (Niespodziewany EOL) Brak zamykającego cytatu lub próba
ucieczki EOF.
Unknown user "x" (Nieznany użytkownik "x") Podany
odbiorca nie ma odpowiadającego mu uid.
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.
Acquiring kernel-lock Procmail próbuje zablokować przez jądro
ostatnio otwarty plik (deskryptor).
Assigning "x" Przyznanie wartości zmiennej środowiskowej.
Assuming identity of the recipient, VERBOSE=off Porzucenie wszystkich
uprawnień (jeśli jakieś były), bezwarunkowo
wyłącza rozszerzoną diagnostykę.
Bypassed locking "x" Katalog spool poczty nie był dostępny
procmailowi, bazował wyłącznie na blokadach jądra.
Executing "x" 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.
HOST mismatched "x" Ten komputer był nazwany "x", a
zmienna HOST zawierała coś innego.
Locking "x" Tworzenie pliku blokującego "x".
Linking to "x" Tworzenie dowiązania twardego pomiędzy
folderami katalogów.
Match on "x" Trafiony warunek.
Matched "x" Przyznano "x" wartość MATCH.
No match on "x" Warunek nie pasował, reguła pominięta.
Non-zero exitcode (nnn) by "x" (Niezerowy (nn) kod zakończenia
"x") 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ść.
Notified comsat: "$LOGNAME@offset:file" Wysłano informację
do comsat(1)/biff(1), że pojawiła się poczta dla
użytkownika $LOGNAME pod "offsetem" w pliku
"file".
Opening "x" Otwieranie pliku "x" dla dopisywania.
Rcfile: "x" Plik rc zmieniony na "x".
Reiterating kernel-lock 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ą.
Score: added newtotal "x" Ten warunek dołożył
"dodatkowe" punkty, co dało w wyniku "nową
sumę" punktacji.
Unlocking "x" Ponowne usuwanie pliku blokującego (lockfile)
"x".
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).
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.
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:
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ą:
Aby być informowanym o nowych wersjach i oficjalnych łatach, należy wysłać zgłoszenie zapisania się do
Stephen R. van den Berg
Mprocmail, P=/usr/bin/procmail, F=mSDFMhun, S=11, R=21, A=procmail -m $h $f $uUmoż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 powrotemA 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ę.
"\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_mboxaKiedy 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.
send usenet/news.answers/mail/filtering-faqJeś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/procmailProcmail 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
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/nullInne przykłady reguł plików rc można obejrzeć na stronie procmailex(5). Program jest częścią pakietu przetwarzania poczty procmail (v3.22), dostępnego pod adresem http://www.procmail.org/ lub ftp.procmail.org w pub/procmail/. 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).
<srb@cuci.nl>Philip A. Guenther
<guenther@sendmail.com>
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Przemek Borys (PTM) <pborys@dione.ids.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ą 3.22 oryginału.2001/08/27 | BuGless |