Provided by: manpages-ro_4.27.0-1_all 

NUME
procmailex - exemple de fișier de configurare al «procmail»
SINOPSIS
exemple de $HOME/.procmailrc
DESCRIERE
Pentru o descriere a formatului fișierului de configurare, consultați procmailrc(5).
Tehnica de punctare ponderată este descrisă în detaliu în pagina de manual procmailsc(5).
Această pagină de manual prezintă câteva exemple de rețete. Pentru exemple de fișiere de configurare
complete, puteți consulta secțiunea NOTE din procmail(1) sau fișierele de configurare de exemplu din
„/usr/share/doc/procmail/examples”.
EXEMPLE
Sortează toate mesajele primite de la lista de discuții scuba-dive în dosarul de e-mail scubafile
(utilizează fișierul de blocare locală scubafile.lock).
:0: * ^TOscuba scubafile
Transmite toate mesajele de la Peter despre compilatoare lui William (și păstrează o copie a acestora
aici în petcompil).
:0
* ^From.*peter
* ^Subject:.*compilatoare
{
:0 c
! william@adresă-oarecare.edu
:0
petcompil
}
O soluție echivalentă care realizează același lucru:
:0 c * ^From.*peter * ^Subject:.*compilatoare ! william@adresă-oarecare.edu
:0 A
petcompil
O soluție echivalentă, dar puțin mai lentă, care realizează același lucru:
:0 c * ^From.*peter * ^Subject:.*compilatoare ! william@adresă-oarecare.edu
:0 * ^From.*peter * ^Subject:.*compilatoare petcompil
Dacă sunteți destul de nou la procmail și intenționați să experimentați un pic, de multe ori este util să
aveți un fel de rețea de siguranță. Inserarea următoarelor două rețete deasupra tuturor celorlalte rețete
va asigura păstrarea ultimelor 32 de mesaje din toate mesajele primite. Pentru a funcționa așa cum este
prevăzut, trebuie să creați un director numit `backup' în $MAILDIR înainte de a insera aceste două
rețete.
:0 c backup
:0 ic | cd backup && rm -f dummy `ls -t msg.* | sed -e 1,32d`
Dacă sistemul dvs. nu generează sau generează linii `From ' de început incorecte la fiecare e-mail,
puteți rezolva acest lucru apelând procmail cu opțiunea -f-. Pentru a rezolva aceeași problemă prin
mijloace diferite, ați fi putut introduce următoarele două rețete deasupra tuturor celorlalte rețete din
rcfile. Acestea vor filtra antetul oricărui mesaj prin formail, care va elimina orice `From ' de la
început și îl va regenera automat ulterior.
:0 fhw | formail -I "From " -a "From "
Adaugă antetele tuturor mesajelor care nu provin de la postmaster la colecția ta privată de antete
(pentru statistici sau depanarea corespondenței); și folosește fișierul de blocare `headc.lock'. Pentru a
vă asigura că fișierul de blocare nu este eliminat până când conducta nu se termină, trebuie să
specificați opțiunea `w'; în caz contrar, fișierul de blocare ar fi eliminat imediat ce conducta ar fi
acceptat mesajul.
:0 hwc: * !^FROM_MAILER | uncompress headc.Z; cat >>headc; compress
headc
Sau, dacă ați folosi mai degrabă gzip în loc de compress:
:0 hwc: * !^FROM_MAILER | gzip >>headc.gz
Transmiteți toate mesajele mai scurte de 1000 de octeți la adresa mea personală (home); această rețetă nu
necesită fișier de blocare.
:0 * < 1000 ! numelemeu@home
Separă pachetele primite de la lista de discuții surfing în mesajele lor individuale și le stochează în
surfing, folosind surfing.lock ca fișier de blocare locală.
:0: * ^Subject:.*surfing.*Digest | formail +1 -ds >>surfing
Stochează tot ce vine de la postmaster sau de la mailer-daemon (cum ar fi corespondența respinsă) în
fișierul postm, folosind postm.lock ca fișier de blocare locală.
:0: * ^FROM_MAILER postm
O rețetă simplă de răspuns automat. Aceasta se asigură că nu se va răspunde automat nici la mesajele
primite de la vreun demon (cum ar fi mesajele de tip „bouncing” sau mesajele din listele de difuzare),
nici la răspunsurile automate primite de la dvs. În cazul în care nu se ia această măsură de precauție,
ar putea rezulta un dezastru (e-mail „ineling”). Pentru ca această rețetă să răspundă automat la toate
mesajele primite, trebuie, desigur, să o introduceți înaintea tuturor celorlalte rețete din rcfile. Cu
toate acestea, este recomandabil să o introduceți după orice rețetă care procesează mesajele din listele
de corespondență abonate; în general, nu este o idee bună să generați răspunsuri automate la listele de
corespondență (da, expresia-regulată !^FROM_DAEMON ar trebui să le prindă deja, dar dacă lista de
corespondență nu respectă convențiile acceptate, acest lucru ar putea să nu fie suficient).
:0 h c
* !^FROM_DAEMON
* !^X-Loop: propria_ta@adresă.de.poștă
| (formail -r -I"Precedence: junk" \
-A"X-Loop: propria_ta@adresă.de.poștă" ; \
echo "Corespondență primită.") | $SENDMAIL -t
O rețetă mai complicată de răspuns automat care implementează echivalentul funcțional al binecunoscutului
program vacation(1). Această rețetă se bazează pe aceleași principii ca și ultima (prevenirea „inelării”
corespondenței). Cu toate acestea, în plus, ea menține o bază de date de vacanță prin extragerea numelui
expeditorului și inserarea acestuia în fișierul vacation.cache dacă numele era nou (fișierul
vacation.cache este menținut de formail, care se va asigura că acesta conține întotdeauna cele mai
recente nume, dimensiunea fișierului fiind limitată la un maxim de aproximativ 8192 octeți). Dacă numele
a fost nou, se va trimite un răspuns automat.
După cum puteți vedea, următoarea rețetă are comentarii între condiții. Acest lucru este permis. Totuși,
nu puneți comentarii pe aceeași linie cu o condiție.
SHELL=/bin/sh # pentru alte shell-uri, acest lucru ar putea necesita
ajustări
:0 Whc: vacation.lock
# Efectuează o verificare rapidă pentru a vedea dacă corespondența ne-a fost adresată
* $^To:.*\<$\LOGNAME\>
# Nu răspunde demonilor și listelor de corespondență
* !^FROM_DAEMON
# Buclele poștale sunt malefice
* !^X-Loop: propria_ta@adresă.de.poștă
| formail -rD 8192 vacation.cache
:0 ehc # dacă numele nu era în cache
| (formail -rI"Precedence: junk" \
-A"X-Loop: propria_ta@adresă.de.poștă" ; \
echo "Am primit mesajul dvs,"; \
echo "dar nu mă voi întoarce până luni."; \
echo "-- "; cat $HOME/.signature \
) | $SENDMAIL -oi -t
Stochează toate mesajele referitoare la TeX în nume de fișiere separate, unice, într-un director numit
texmail (acest director trebuie să existe); nu este nevoie să se utilizeze fișiere de blocare în acest
caz, deci nu o vom face.
:0 * (^TO|^Subject:.*)TeX[^t] texmail
La fel ca mai sus, doar că acum stocăm mesajele în fișiere numerotate (dosarul de poștă electronică MH).
:0 * (^TO|^Subject:.*)TeX[^t] texmail/.
Sau ați putea depune corespondența în mai multe dosare de directoare în același timp. Următoarea rețetă
va trimite e-mailul în două dosare MH și într-un dosar de directoare. De fapt, este vorba despre un
singur fișier cu două legături dure suplimentare.
:0 * (^TO|^Subject:.*)TeX[^t] texmail/. wordprocessing dtp/.
Stochează toate mesajele despre reuniuni într-un dosar care se află într-un director care se schimbă în
fiecare lună. De exemplu, dacă ar fi ianuarie 1994, dosarul ar avea numele „94-01/reuniuni” și fișierul
de blocare locală ar fi „94-01/reuniuni.lock”.
:0: * reuniune `date +%y-%m`/reuniuni
La fel ca mai sus, dar, dacă directorul „94-01” nu ar fi existat, acesta este creat automat:
DOSARLUNAR=`date +%y-%m`
:0 Wic * ? test ! -d $DOSARLUNAR | mkdir $DOSARLUNAR
:0: * reuniune ${DOSARLUNAR}/reuniuni
La fel ca mai sus, dar acum prin metode ușor diferite:
DOSARLUNAR=`date +%y-%m` DUMMY=`test -d $DOSARLUNAR || mkdir $DOSARLUNAR`
:0: * reuniune ${DOSARLUNAR}/reuniuni
Dacă sunteți abonat la mai multe liste de corespondență și există persoane care publică mesaje
încrucișate pe unele dintre ele, de obicei primiți mai multe mesaje duplicat (câte unul de la fiecare
listă). Următoarea rețetă simplă elimină mailurile duplicat. Aceasta îi spune lui formail să păstreze un
fișier cache de 8KB în care va stoca ID-urile mesajelor celor mai recente mesaje pe care le-ați primit.
Deoarece ID-urile mesajelor sunt garantate a fi unice pentru fiecare mesaj nou, acestea sunt ideale
pentru a elimina mesajele duplicat. Pur și simplu puneți următoarea rețetă în partea de sus a fișierului
dvs. rc și niciun mesaj duplicat nu va trece de ea.
:0 Wh: msgid.lock | formail -D 8192 msgid.cache
Atenție dacă aveți probleme de livrare în rețetele de mai jos și procmail încearcă să solicite
corespondența, atunci la următoarea execuție a cozii, această corespondență va fi considerată un duplicat
și va fi aruncată. Pentru cei care nu sunt atât de încrezători în propriile capacități de scriere de
scripturi, puteți utiliza în schimb următoarea rețetă. Aceasta pune dublurile într-un dosar separat în
loc să le arunce. Desigur, depinde de dvs. să goliți periodic dosarul.
:0 Whc: msgid.lock | formail -D 8192 msgid.cache
:0 a: duplicates
Procmail poate livra direct către dosarele MH, dar, nu actualizează secvențele nevăzute pe care le
gestionează MH real. Dacă doriți ca procmail să le actualizeze și pe acestea, utilizați o rețetă ca cea
de mai jos, care va arhiva tot ceea ce conține cuvântul spam în corpul mesajului într-un dosar MH numit
spamfold. Observați fișierul de blocare local, care este necesar deoarece programele MH nu blochează
fișierul de secvențe. Prin urmare, invocările asincrone ale programelor MH care modifică fișierul de
secvențe îl pot corupe sau pot pierde în mod silențios modificările. Din păcate, fișierul de blocare nu
rezolvă complet problema, deoarece rcvstore ar putea fi invocat în timp ce `show' sau `mark' sau un alt
program MH rulează. Se așteaptă ca această problemă să fie rezolvată într-o versiune viitoare a MH, dar
până atunci, va trebui să puneți în balanță riscul pierderii sau al coruperii secvențelor cu beneficiile
secvenței nevăzute.
:0 :spamfold/$LOCKEXT * B ?? spam | rcvstore +spamfold
Atunci când livrați direct dosare emacs (de exemplu, dosare de e-mail gestionate de orice pachet de
e-mail emacs, de exemplu, RMAIL sau VM), ar trebui să utilizați fișiere de blocare compatibile cu emacs.
Agenții de poștă electronică emacs sunt un pic „creierul deteriorat” în această privință, ei devin foarte
supărați dacă cineva livrează la dosarele de poștă electronică pe care le au deja în tampoanele lor
interne. Următoarea rețetă presupune că $HOME este egal cu /home/john.
MAILDIR=Mail
:0:/usr/local/lib/emacs/lock/!home!john!Mail!mailbox *
^Subject:.*orice-lucru mailbox
Alternativ, puteți face ca procmail să livreze în propriul set de căsuțe poștale, pe care apoi le goliți
periodic și le copiați în fișierele dvs. emacs utilizând movemail. «movemail» utilizează fișiere de
blocare locale mailbox.lock pentru fiecare căsuță poștală. Acesta este, de fapt, modul preferat de
operare împreună cu procmail.
Pentru a extrage anumite antete dintr-un mesaj și a le pune în variabile de mediu, puteți utiliza oricare
dintre următoarele construcții:
SUBJECT=`formail -xSubject:` # câmp normal FROM=`formail -rt -xTo:` # caz
special
:0 h # metodă alternativă KEYWORDS=| formail -xKeywords:
Dacă utilizați fișiere temporare într-un fișier procmailrc și doriți să vă asigurați că acestea sunt
eliminate chiar înainte ca procmail să iasă, ați putea utiliza ceva de felul:
TEMPORARY=$HOME/tmp/pmail.$$ TRAP="/bin/rm -f $TEMPORARY"
Cuvântul cheie TRAP poate fi utilizat și pentru a schimba codul de ieșire al procmail. De exemplu, dacă
doriți ca procmail să returneze un cod de ieșire „1” în loc de codurile sale de ieșire obișnuite, puteți
utiliza:
EXITCODE=""
TRAP="exit 1;" # Punctul și virgula din urmă este important
# deoarece exit nu este un program de sine stătător
Sau, dacă codul de ieșire nu trebuie să depindă de programele rulate din TRAP, puteți utiliza un simplu:
EXITCODE=1
Următoarea rețetă imprimă fiecare mesaj primit care arată ca un fișier postscript.
:0 Bb * ^^%! | lpr
Următoarea rețetă face același lucru, dar este un pic mai selectivă. Aceasta imprimă fișierul postscript
numai dacă acesta provine de la serverul de imprimare. Prima condiție se potrivește numai dacă este
găsită în antet. A doua condiție se potrivește numai la începutul corpului.
:0 b * ^From[ :].*print-server * B ?? ^^%! | lpr
La fel ca mai sus, dar acum prin metode ușor diferite:
:0
* ^From[ :].*print-server
{
:0 B b
* ^^%!
| lpr
}
De asemenea:
:0 HB b * ^^(.+$)*From[ :].*print-server * ^^(.+$)*^%! | lpr
Să presupunem că aveți două conturi, le folosiți pe amândouă în mod regulat, dar se află în locuri foarte
diferite (de exemplu, puteți citi doar corespondența care a ajuns la unul dintre conturi). Ați dori să
redirecționați corespondența sosită la contul unu către contul doi, și invers. Primul lucru care vă vine
în minte este utilizarea fișierelor .forward la ambele situri; desigur, acest lucru nu va funcționa,
deoarece veți crea o buclă de poștă electronică. Această buclă poate fi evitată prin inserarea următoarei
rețete în fața tuturor celorlalte rețete din fișierele $HOME/.procmailrc de pe ambele situri. Dacă vă
asigurați că adăugați același câmp X-Loop: pe ambele situri, e-mailul poate fi redirecționat în siguranță
către celălalt cont din oricare dintre acestea.
:0 c
* !^X-Loop: numeletău@adresa.ta.principală.de.poștă
| formail -A "X-Loop: numeletău@adresa.ta.principală.de.poștă" | \
$SENDMAIL -oi numeletăue@altă.adresă.a.ta.de.poștă
Dacă cineva vă trimite un mesaj cu cuvântul „recuperare” în câmpul „subject”, următorul mesaj va trimite
automat înapoi expeditorului conținutul fișierului info_file. Ca în toate rețetele în care trimitem
mesaje, trebuie să fim atenți la buclele de poștă electronică.
:0 * !^From +MUMELETĂU_DE_UTILIZATOR * !^Subject:.*Re: * !^FROM_DAEMON *
^Subject:.*recuperare | (formail -r ; cat info_file) | $SENDMAIL -oi -t
Acum urmează un exemplu pentru un server de fișiere foarte simplu accesibil prin poștă electronică.
Pentru aplicații mai pretențioase, vă sugerez să aruncați o privire la SmartList (disponibil din același
loc ca și distribuția procmail). Conform listei, acest server de fișiere trimite cel mult un fișier pe
cerere, ignoră corpul mesajelor primite, linia Subject: trebuie să arate ca „Subject: trimite fișierul
fișierul_ce_doriți” (spațiile goale sunt semnificative), nu returnează fișiere care au nume care încep cu
un punct și nici nu permite recuperarea fișierelor care se află în afara arborelui de directoare al
serverului de fișiere (dacă decideți să modificați acest exemplu, asigurați-vă că nu slăbiți din greșeală
această ultimă restricție).
:0
* ^Subject: send file [0-9a-z]
* !^X-Loop: numele-tău@adresa.ta.principală.de email
* !^Subject:.*Re:
* !^FROM_DAEMON
* !^Subject: trimite fișierul .*[/.]\.
{
MAILDIR=$HOME/server-fișierer # schimbă la directorul serverului de fișiere
:0 fhw # inversează antetul e-mailului și extrage numele
* ^Subject: trimite fișierul \/[^ ]*
| formail -rA "X-Loop: numele-tău@adresa.ta.principală.de email"
FILE="$MATCH" # numele fișierului solicitat
:0 ah
| cat - ./$FILE 2>&1 | $SENDMAIL -oi -t
}
Următorul exemplu preconvertește toate mesajele în text simplu care sosesc în anumite formate MIME
codificate într-un format mai compact pe 8 biți care poate fi utilizat și afișat mai ușor de majoritatea
programelor. Programul mimencode(1) face parte din pachetul metamail al lui Nathaniel Borenstein.
: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"
}
Următorul este destul de exotic, dar servește doar pentru a demonstra o caracteristică. Să presupunem că
aveți un fișier în directorul HOME numit „.urgent”, iar (singura) persoană numită în acel fișier este
expeditorul unui mesaj primit, ați dori ca acel mesaj să fie stocat în $MAILDIR/urgent în loc să fie în
oricare dintre dosarele de e-mail normale în care ar fi fost sortat. Atunci iată ce ați putea face
(atenție, lungimea fișierului $HOME/.urgent ar trebui să fie mult sub $LINEBUF, măriți LINEBUF dacă este
necesar):
URGMATCH=`cat $HOME/.urgent`
:0: * $^From.*${URGMATCH} urgent
O aplicație complet diferită pentru procmail ar fi aplicarea condițională a filtrelor la un anumit text
sau mesaj (de ieșire). Un exemplu tipic ar fi un filtru prin care treceți toate mesajele de ieșire,
pentru a vă asigura că acestea vor fi codificate MIME numai dacă este necesar. Adică, în acest caz, ați
putea porni procmail în mijlocul unei conducte cum ar fi:
cat newtext | procmail ./mimeconvert | mail chris@where.ever
Fișierul rc mimeconvert ar putea conține ceva de genul (=0x80= și =0xff= ar trebui înlocuite cu caractere
reale pe 8 biți):
DEFAULT=| # conductă la stdout în loc să livreze
# corespondența ca de obicei
: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'
CONSULTAȚI ȘI
procmail(1), procmailrc(5), procmailsc(5), sh(1), csh(1), mail(1), mailx(1), uucp(1), aliases(5),
sendmail(8), egrep(1), grep(1), biff(1), comsat(8), mimencode(1), lockfile(1), formail(1)
AUTORI
Stephen R. van den Berg
<srb@cuci.nl>
Philip A. Guenther
<guenther@sendmail.com>
TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu
<remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o
versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO
RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
ro@lists.sourceforge.net.
BuGless 2001/08/04 PROCMAILEX(5)