PROCMAIL(1) | General Commands Manual | PROCMAIL(1) |
NAZWA¶
procmail - autonomiczny procesor poczty
SKŁADNIA¶
procmail [-ptoY] [-f fromwhom]
[parameter=value | rcfile] ...
procmail [-toY] [-f fromwhom] [-a
argument] -d recipient ...
procmail [-ptY] -m [parameter=value] ...
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 roota (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 sendmaila.
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).
Sygnały¶
- 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
- Równoważnik VERBOSE=off.
- USR2
- Równoważnik VERBOSE=on.
OPCJE¶
- -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ą 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
szczęśliwie 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 preustawianych 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 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. Może
być używane do przekazywania metainformacji do procmaila.
Zazwyczaj wykonuje się to przez przesyłanie informacji $@x z
reguły sendmaila.
- -d recipient ...
- Włącza jawny tryb dostarczania. Dostarczenie nastąpi
do lokalnego odbiorcy, oznaczonego jako recipient. 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 rodzicielski 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 sekcji 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, jeśli zaczynają się od `./', względne, w odniesieniu do bieżącego katalogu. 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, sugeruję 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). Zwróć uwagę na poczatkową 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:
:0 # spuść do muszli pocztę śmieciową ;) * ^Subject:.*junk /dev/null :0 # przekaż resztę przesyłek dalej ! -oi -f "$@"
Uważaj gdy z wnętrza pliku /etc/procmailrcs/some.rc
wysyłasz listy: jeśli wyślesz je na adresy,
które odpowiadają znowu pierwszej regule, możesz
utworzyć nieskończoną pętlę.
PLIKI¶
- /etc/passwd
- do ustawiania domyślnych wartości zmiennych LOGNAME, HOME i
SHELL odbiorcy
- /var/spool/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/spool/mail/$LOGNAME.lock
- plik blokujący systemowej skrzynki pocztowej (nie jest
automatycznie używany przez procmail, chyba że $DEFAULT jest
równe /var/spool/mail/$LOGNAME, a procmail dostarcza coś do
$DEFAULT)
- /usr/sbin/sendmail
- domyślny program ekspedycji poczty (forwarder)
- _????`hostname`
- tymczasowe `unikalne' 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), binmail(1), uucp(1), aliases(5), sendmail(8), egrep(1), grep(1), biff(1), comsat(8), lockfile(1), formail(1), cron(1)
DIAGNOSTYKA¶
- Autoforwarding mailbox found
- (Znaleziono skrzynkę auto-przekazującą) Skrzynka
systemowa miała ustawiony bit suid lub sgid, procmail kończy
z 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
(zagniż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")
W mechanice dostarczania wiadomości do katalogu pocztowego
"x" wystąpił błąd.
- Couldn't determine implicit lockfile from "x"
- (Nie można określić jawnego pliku blokady z
"x") Nie znaleziono przekierowań `>>', używa
zwyczajnie `$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 PROCMAIL_OVERFLOW.
- 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.
- 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 EOF.
- 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"
- Wyrażenie regularne "x" zawiera błędy
(najprawdopodobniej brakujące lub nadmiarowe nawiasy).
- Kernel-lock failed
- 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
- Zawiodła próba odblokowania za pośrednictwem funkcji
jądra. Zobacz wyżej.
- Lock failure on "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"
- 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) Podałeś opcję -a, lecz
zapomniałeś argumentu.
- Missing rcfile
- (Brak pliku rc) Podałeś opcję -m, procmail oczekuje
nazwy pliku rc jako argumentu.
- Missing recipient
- (Brak odbiorcy) Podałeś opcję -d lub
wywołałeś procmail pod inną nazwą,
program oczekuje przynajmniej jednego odbiorcy jako argumentu.
- No space left to finish writing "x"
- System plików zawierający "x" nie ma
dość wolnego miejsca, aby umożliwiść
dostarczenie wiadomości do pliku.
- Out of memory
- Systemowi brakuje swapu (a wyczerpano NORESRETRY).
- Processing continued
- Nierozpoznane opcje wierszu poleceń są ignorowane,
kontynuowanie jak zwykle.
- Program failure (nnn) of "x"
- Program uruchomiony przez procmaila zwrócił 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.
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.
- 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 host był nazwany "x", HOST zawierało
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 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/biff, ż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".
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 musisz ubić procmaila zanim zakończy działanie, użyj zwykłego polecenia kill (np. nie kill -9, zobacz podsekcję Sygnały dla sugestii), inaczej niektóre pliki blokujące (lockfiles) mogą nie zostać usunięte.
Strzeż się gdy używasz 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 bądź bardzo ostrożny z tym, co tam wstawiasz. SHELL będzie zgodny z powłoką bieżącego odbiorcy, więc jeśli procmail ma wywoływać powłokę, lepiej ustaw to wpierw na bezpieczną wartość. Zobacz także : DROPPRIVS.
Pamiętaj, ż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 upewnij się, ż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 masz
jedno konto POP dla całej poczty w swojej domenie. Da się to
zrobić, jeśli uda ci 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 poszukać np. funkcji `multidrop'
(wielopunktowości) Fetchmaila.
BŁĘDY¶
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.
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 odpowiadać /, LOGNAME będzie odpowiadać #uid, a SHELL będzie odpowiadać /bin/sh.
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/spool/mail/$LOGNAME jest zmyśloną skrzynką (np. nie należy do odbiorcy, jest niezapisywalny, jest dowiązaniem), 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/spool/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 musisz 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 korzystywania 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/biff 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 konsystentnie następujących jądrowych strategii blokowania : fcntl(2) i lockf(3).
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 procnail 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 $HOME/.forward (uwaga, musi być dostępny ogółowi do odczytu) powinien zawierać poniższą linię. Upewnij się, że wstawiłeś pojedyncze i podwójne znaki cytowania i musi to być absolutna ścieżka. #YOUR_USERNAME nie jest właściwie parametrem wymaganym przez procmaila, a w rzeczywistości procmail nawet go nie ujrzy; jest to jednak niezbędny fortel przeciw nadoptymalizującym programom sendmail:
" |IFS=' '&&exec /usr/local/bin/procmail -f- | |exit 75 #YOUR_USERNAME"
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 crona(1) albo każdorazowo gdy zaczynasz czytać pocztę):
#!/bin/sh ORGMAIL=/var/spool/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=/bin:/usr/bin:/usr/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).
ŹRÓDŁO¶
Program ten jest częścią pakietu procmail mail-processing-package (v3.10 1994/10/31) dostępnego w najbliższym archiwum USENET comp.sources.misc lub na ftp ftp.informatik.rwth-aachen.de jako pub/packages/procmail/procmail.tar.gz.
LISTA DYSKUSYJNA¶
Istnieje lista dyskusyjna dla pytań związanych z programami pakietu procmail:
procmail@informatik.rwth-aachen.de
do wysyłania pytań/odpowiedzi.
do zażądania zapisania się.
AUTOR¶
Stephen R. van den Berg z RWTH-Aachen, Germany
2001/07/24 | BuGless |