Provided by:
manpages-pl_20060617-3_all 
NAZWA
procmailex - przyklady plikow rc procmaila
SK/LADNIA
przyk/lady $HOME/.procmailrc
OPIS
Dla opisu formatu pliku rc zobacz stron procmailrc(5).
Technika punktow waonych jest opisana szczegolowo na stronie
procmailsc(5).
Ta strona podrcznika pokazuje kilka przykladowych regul. Przyklady
kompletnych plikow rc znajdziesz w sekcji UWAGI podrcznika procmail(1),
moesz te zajrze do przykladowych plikow rc, ktore s rozprowadzane wraz
ze rodlami procmaila jako cz dystrybucji
(procmail*/examples/?procmailrc).
PRZYK/LADY
Posortuj poczt przychodzc z listy dyskusyjnej scuba-dive do folderu
pocztowego scubafile (uywa lokalnego pliku blokujcego scubafile.lock).
:0:
* ^TOscuba
scubafile
Forwarduj poczt o kompilatorach od petera do williama (i zachowaj kopi
lokalnie, w petcompil).
:0
* ^From.*peter
* ^Subject:.*compilers
{
:0 c
! william@somewhere.edu
:0
petcompil
}
Rownowane rozwizanie, ktore robi to samo:
:0 c
* ^From.*peter
* ^Subject:.*compilers
! william@somewhere.edu
:0 A
petcompil
Rownowane, lecz troch wolniejsze rozwizanie, robice to samo:
:0 c
* ^From.*peter
* ^Subject:.*compilers
! william@somewhere.edu
:0
* ^From.*peter
* ^Subject:.*compilers
petcompil
Jeli jeste nowy jeli chodzi o procmaila i planujesz troch
poeksperymentowa, to dobrze jest mie jaki rodzaj sieci bezpieczestwa.
Wstawienie nastpujcych dwoch regul ponad wszystkimi innymi regulami,
zapewni, e ostatnie 32 wiadomoci bd chronione. Aby dzialalo to zgodnie
z oczekiwaniami, musisz utworzy w katalogu $MAILDIR katalog `backup'.
:0 c
backup
:0 ic
| cd backup && rm -f dummy `ls -t msg.* | sed -e 1,32d`
Jeli twoj system nie generuje pocztkowych linii `From ', lub generuje
je w nieprawidlowy sposob, moesz to naprawi wywolujc procmail z opcj
-f-. Innym sposobem naprawienia tego problemu jest wstawienie
nastpujcych dwoch regul powyej wszystkich innych regul pliku rc. Bd one
filtrowa naglowek dowolnego listu przez formail, ktory obetnie wszelkie
pocztkowe `From ' i automatycznie je odtworzy.
:0 fhw
| formail -I "From " -a "From "
Dodaj naglowki wszystkich wiadomoci, ktore nie przyszly od postmastera,
do prywatnej kolekcji naglowkow (dla statystyk, lub debuggowania
poczty); uyj pliku blokujcego `headc.lock'. Aby zapewni, e plik
blokujcy nie zostanie usunity przed zakoczeniem potoku, trzeba poda
opcj `w'; w przeciwnym wypadku plik blokujcy zostalby usunity w
momencie przyjcia przez potok poczty.
:0 hwc:
* !^FROM_MAILER
| uncompress headc.Z; cat >>headc; compress headc
Lub jeli chcesz uy efektywniejszego gzip-a zamiast compress-a:
:0 hwc:
* !^FROM_MAILER
| gzip >>headc.gz
Forwarduj wszystkie wiadomoci krotsze ni 1000 bajtow na moj adres
domowy (w tej regule nie potrzebny jest plik blokujcy).
:0
* < 1000
! myname@home
Podziel nadchodzcy z listy dyskusyjnej surfing digest na pojedyncze
wiadomoci i zachowaj je w surfing, uywajc lokalnego pliku lokujcego
surfing.lock.
:0:
* ^Subject:.*surfing.*Digest
| formail +1 -ds >>surfing
Zachowaj w pliku postm wszystko pochodzce od postmastera, lub mailer-
deamona. Uyj pliku postm.lock jako lokalnego pliku lokujcego.
:0:
* ^FROM_MAILER
postm
Prosta regula auto-odpowiadajca. Upewnia si, e nie odpowiada na poczt
od jakiego demona (np. odbita poczta lub poczta z list dyskusyjnych),
ani na listy pochodzce od ciebie samego. Jeli zabezpieczenia te nie
zostan podjte, to moe si zdarzy katastrofa. Aby regula odpowiadala na
poczt przychodzc, powiniene wstawi j przed wszystkie inne reguly pliku
rc. Radzi si jednak wstawia j za wszelkimi regulami, ktore obsluguj
poczt pochodzc z list dyskusyjnych; zazwyczaj nie jest dobrym pomyslem
generowanie automatycznych odpowiedzi na listy dyskusyjne (tak, regexp
!^FROM_DAEMON powinien je wylapa, jednak jeli lista dyskusyjna nie
pracuje zgodnie z konwencjami, to moe to by zbyt malo).
:0 h c
* !^FROM_DAEMON
* !^X-Loop: twoj@wlasny.adres.pocztowy
| (formail -r -A"Precedence: junk" \
-A"X-Loop: twoj@wlasny.adres.pocztowy" ; \
echo "Poczta odebrana.") | $SENDMAIL -t
Bardziej skomplikowana regula auto-odpowiadajca, ktora implementuje
funkcjonalno znanego programu vacation(1). Regula ta jest oparta na
tych samych zasadach co poprzednia. Dodatkowo obsluguje baz vacation,
wylczajc nazwisko nadawcy i wstawiajc je do pliku vacation.cache, o ile
bylo ono nowe (plik vacation.cache jest obslugiwany przez formail,
ktory bdzie si upewnial, e zawiera tylko najnowsze nazwiska; rozmiar
pliku jest ograniczony do 8192 bajtow). Jeli nazwisko bylo nowe,
wyslana zostanie auto-odpowied.
SHELL=/bin/sh # dla innych powlok trzeba to poprawi
:0 Whc: vacation.lock
* !^FROM_DAEMON
* !^X-Loop: twoj@wlasny.adres.pocztowy
| formail -rD 8192 vacation.cache
:0 ehc # jeli nazwiska nie bylo w cache
| (formail -rA"Precedence: junk" \
-A"X-Loop: twoj@wlasny.adres.pocztowy" ; \
echo "Odebralem twoj list,"; \
echo "lecz nie wroc do poniedzialku."; \
echo "-- "; cat $HOME/.signature \
) | $SENDMAIL -oi -t
Wszelkie wiadomoci dotyczce TeX-a zachowaj w oddzielnych, unikalnych
nazwach pliku, w katalogu o nazwie texmail (katalog musi istnie); nie
ma potrzeby uywa w tym wypadku plikow blokujcych, wic ich nie uywamy.
:0
* (^TO|^Subject:.*)TeX[^t]
texmail
To samo co powyej, lecz teraz zapisujemy listy w numerowanych plikach
(folder pocztowy MH).
:0
* (^TO|^Subject:.*)TeX[^t]
texmail/.
Moesz te wprowadzi list do kilku folderow naraz. Nastpujca regula
dostarczy poczt do dwoch folderow MH i jednego folderu katalogowego.
Jest to w rzeczywistoci tylko jeden plik z dwoma dodatkowymi
dowizaniami twardymi (hardlinks).
:0
* (^TO|^Subject:.*)TeX[^t]
texmail/. wordprocessing dtp/.
Zachowaj wszystkie listy o spotkaniach (meetings) w folderze, ktory
jest w comiesicznie zmienianym katalogu . Np. jeli byl Stycze 1994,
folder mialby nazw 94-01/meeting, a lokalny plik blokujcy nazywalby si
`94-01/meeting.lock'.
:0:
* meeting
`date +%y-%m`/meeting
To samo co wyej, lecz jeli katalog `94-01' nie istnialby, to
automatycznie zostanie utworzony:
MONTHFOLDER=`date +%y-%m`
:0 ic
* ? test ! -d $MONTHFOLDER
| mkdir $MONTHFOLDER
:0:
* meeting
${MONTHFOLDER}/meeting
To samo co powyej, lecz z uyciem innych rodkow:
MONTHFOLDER=`date +%y-%m`
DUMMY=`test -d $MONTHFOLDER || mkdir $MONTHFOLDER`
:0:
* meeting
${MONTHFOLDER}/meeting
Jeli jeste podlczony do kilku list dyskusyjnych, a ludzie crosspostuj
na niektore z nich, to moesz otrzymywa zduplikowane listy (po jednym z
kadej listy). Nastpujca regula eliminuje powtorzone listy. Mowi
formailowi by trzymal 8KB plik cache, w ktorym bdzie zapisywal Message-
ID ostatnio odbieranych listow. Poniewa elementy te musz by unikalne
dla kadego nowego listu, to s idealnym rozwizaniem na duplikaty. Wstaw
zwyczajnie nastpujc regul na pocztek swojego pliku rc i gotowe.
:0 Wh: msgid.lock
| formail -D 8192 msgid.cache
Podczas bezporedniego dostarczania do folderow emacsa (np. folderow
pocztowych obslugiwanych przez dowolny pocztowy pakiet emacsowy, np.
RMAIL czy VM), powiniene uywa kompatybilnych z emacsem plikow
blokujcych. Mailerom emacsowe brakuje pitej klepki pod tym wzgldem,
denerwuj si bardzo jeli kto dostarcza poczt do folderow, ktore znajduj
si ju w ich buforach wewntrznych. Nastpujca regula zaklada, e $HOME
odpowiada /home/john.
MAILDIR=Mail
:0:/usr/local/lib/emacs/lock/!home!john!Mail!mailbox
* ^Subject:.*cokolwiek
mailbox
Inaczej, moesz kaza procmailowi dostarcza poczt do swoich wlasnych
mailboxow, a nastpnie periodycznie opronia je i kopiowa do plikow
emacsowych przy uyciu movemail. Movemail uywa lokalnych plikow
blokujcych mailbox.lock dla danego mailboxa.
Aby wycign okrelone naglowki z listu i wstawi je do zmiennych
rodowiskowych, moesz uy dowolnej z nastpujcych konstrukcji:
SUBJECT=`formail -xSubject:` # pole regularne
FROM=`formail -rt -xTo:` # przypadek specjalny
:0 h # metoda alternatywna
KEYWORDS=| formail -xKeywords:
Jeli uywasz w pliku procmailrc plikow tymczasowych i chcesz upewni si,
e s one usuwane zaraz przed zakoczeniem pracy procmaila, moesz uy
linijek podobnych do tych:
TEMPORARY=$HOME/tmp/pmail.$$
TRAP="/bin/rm -f $TEMPORARY"
Slowo kluczowe TRAP moe by take uyte do zmiany kodu wyjcia procmaila.
Np. jeli chcesz by procmail zakoczyl prac z kodem wyjcia `1' zamiast
standardowego kodu, moesz uy:
EXITCODE=""
TRAP="exit 1;" # Koczcy rednik jest istotny
# gdy exit nie jest samodzielnym programem
Albo te jeli kod wyjcia nie musi zalee od programow uruchamianych z
TRAP, moesz uy zwyklego:
EXITCODE=1
Nastpujca regula drukuje kady nadchodzcy list, ktory wyglda jak plik
postscriptowy.
:0 Bb
* ^^%!
| lpr
Nastpujca regula robi to samo, lecz jest troch bardziej selektywna.
Drukuje tylko te pliki postscriptowe, ktore pochodz od print-serwera.
Pierwszy warunek dopasowuje tylko jeli zostanie znaleziony w naglowku.
Nastpny dopasowuje tylko na pocztku ciala wiadomoci.
:0 b
* ^From[ :].*print-server
* B ?? ^^%!
| lpr
To samo co wyej, lecz z uyciem innych rodkow:
:0
* ^From[ :].*print-server
{
:0 B b
* ^^%!
| lpr
}
Podobnie:
:0 HB b
* ^^(.+$)*From[ :].*print-server
* ^^(.+$)*^%!
| lpr
Zalomy, e masz dwa konta i e uywasz ich obu regularnie, lecz s one w
ronych miejscach (np. moesz czyta poczt z tylko jednego z dwoch kont).
Jeli chcialby forwardowa poczt przybywajc na konto jeden do konta dwa i
odwrotnie. Pierwsz rzecz, ktora przychodzi na myl jest uycie na obydwu
hostach plikow .forward; lecz to nie zadziala gdy utworzysz ptl
pocztow. Moesz unikn ptli przez wstawienie nastpujcej reguly na
pocztku wszystkich innych regul w plikach $HOME/.procmailrc obydwu
hostow. Jeli upewnisz si, e dodale te samo pole X-Loop: na obydwu
hostach, to poczta moe ju by spokojnie forwardowana na drugie konto.
:0 c
* !^X-Loop: twojlogin@twoj.adres.pocztowy
| formail -A "X-Loop: twojlogin@twoj.adres.pocztowy" | \
$SENDMAIL -oi twojlogin@drugie.konto
Jeli kto przesyla ci poczt ze slowem `retrieve' w temacie, to nastpujca
regula automatycznie odele z powrotem zawarto pliku info_file. Jak we
wszystkich regulach, uwaamy na ptle pocztowe.
:0
* !^From +TWOJ_USERNAME
* !^Subject:.*Re:
* !^FROM_DAEMON
* ^Subject:.*retrieve
| (formail -r ; cat info_file) | $SENDMAIL -oi -t
A teraz przyklad bardzo prostego serwera plikow dostpnego przez poczt.
Dla bardziej wymagajcych aplikacji, sugeruj rzucenie okiem na SmartList
(dostpne w tym samym miejscu co dystrybucja procmaila). Ten serwer
plikow odsyla najwyej jeden plik na dane danie, ignoruje cialo
nadchodzcych listow, a linia tematu Subject: musi wyglda jak "Subject:
send file plik_ktorego_chcesz" (spacje s istotne), nie zwraca plikow,
ktore maj nazwy rozpoczynajce si od kropki i nie umoliwia odbioru
plikow spoza drzewa katalogow serwera plikow.
:0
* ^Subject: send file [0-9a-z]
* !^X-Loop: twojlogin@twoj.adres.pocztowy
* !^Subject:.*Re:
* !^FROM_DAEMON
* !^Subject: send file .*[/.]\.
{
MAILDIR=$HOME/fileserver # zmie katalog do katalogu serwera plikow
:0 fhw # odwro naglowek listu i wycignij nazw
* ^Subject: send file \/[^ ]*
| formail -rA "X-Loop: twojlogin@twoj.adres.pocztowy"
FILE="$MATCH" # dany plik
:0 ah
| cat - ./$FILE 2>&1 | $SENDMAIL -oi -t
}
Nastpujcy przyklad zamienia wstpnie wszystkie przychodzce listy w
czystym tekcie, kodowane w formatach MIME na ladniejszy format
8-bitowy, ktory moe by uywany i wywietlany w prostszy sposob przez
wikszo programow. Program mimencode(1) jest czci pakietu metamail
Nathaniela Borensteina.
:0
* ^Content-Type: *text/plain
{
:0 fbw
* ^Content-Transfer-Encoding: *quoted-printable
| mimencode -u -q
:0 Afhw
| formail -I "Content-Transfer-Encoding: 8bit"
:0 fbw
* ^Content-Transfer-Encoding: *base64
| mimencode -u -b
:0 Afhw
| formail -I "Content-Transfer-Encoding: 8bit"
}
Nastpujcy przyklad jest raczej egzotyczny, lecz sluy tylko ilustracji
wlaciwoci. Zalomy, e masz w swoim katalogu domowym plik o nazwie
".pilne", a osoba wymieniona w tym pliku jest wysylajcym nadchodzcego
listu i chcialby, by ten list byl zachowany w katalogu $MAILDIR.pilne
zamiast w dowolnym z normalnych folderow pocztowych. Moesz wowczas
zrobi tak (uwaaj, dlugo $HOME/.pilne powinna by nisza ni $LINEBUF, jeli
to konieczne, zwiksz warto LINEBUF):
URGMATCH=`cat $HOME/.pilne`
:0 B:
* $^From.*${URGMATCH}
pilne
Calkowicie innym zastosowaniem procmaila byloby warunkowe dolczanie
filtrow do niektorych (wychodzcych) tekstow lub listow. Typowym
przykladem byloby filtrowanie, w ktorym uywasz potokow dla wszystkich
wychodzcych list aby upewni si czy bdziemy kodowa w MIME tylko wtedy
gdy to konieczne. Np. w tym wypadku moesz uruchomi procmaila wewntrz
potoku rodzaju:
cat newtext | procmail ./mimeconvert | mail chris@where.ever
Plik rc mimeconvert powinien zawiera co w rodzaju (=0x80= i =0xff=
powinny by zamienione prawdziwymi 8-bitowymi znakami):
DEFAULT=| # potok na stdout zamiast
# dostarczania poczt jak zwykle
:0 Bfbw
* [=0x80=-=0xff=]
| mimencode -q
:0 Afhw
| formail -I 'MIME-Version: 1.0' \
-I 'Content-Type: text/plain; charset=ISO-8859-1' \
-I 'Content-Transfer-Encoding: quoted-printable'
ZOBACZ TAKE
procmail(1), procmailrc(5), procmailsc(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), mimencode(1), lockfile(1), formail(1)
AUTOR
Stephen R. van den Berg z RWTH-Aachen, Germany
berg@pool.informatik.rwth-aachen.de
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.