PROCMAILRC(5) | File Formats Manual | PROCMAILRC(5) |
NUME¶
procmailrc - fișierul de configurare al «procmail»
SINOPSIS¶
$HOME/.procmailrc
DESCRIERE¶
Pentru un ghid rapid, consultați NOTE la sfârșitul paginii de manual procmail(1).
Fișierul de configurare rc poate conține o combinație de atribuiri de variabile de mediu (unele dintre ele având semnificații speciale pentru procmail) și rețete. În forma lor cea mai simplă, rețetele sunt expresii regulate de o singură linie care sunt căutate în antetul mesajului primit. Prima rețetă care se potrivește este utilizată pentru a determina unde trebuie să ajungă mesajul (de obicei, un fișier). Dacă procesarea ajunge la sfârșitul fișierului de configurare, procmail va livra mesajul către $DEFAULT.
Există două tipuri de rețete: rețete de livrare și rețete de fără livrare. Dacă se găsește o rețeta de livrare care corespunde, procmail consideră că corespondența (ați ghicit) a fost livrată și va înceta procesarea fișierului de configurare după executarea cu succes a liniei de acțiune a rețetei. Dacă se găsește o rețetă fără livrare, procesarea fișierului de configuare va continua după ce linia de acțiune a acestei rețete a fost executată.
Rețetele de livrare sunt cele care fac ca antetul și/sau corpul mesajului să fie: scrise într-un fișier, absorbite de un program sau transmise la o adresă de poștă electronică.
Rețetele care nu se livrează sunt: cele care fac ca ieșirea unui program sau filtru să fie capturată înapoi de procmail sau cele care încep un bloc de imbricare.
Îi puteți spune lui procmail să trateze o rețetă de livrare ca și cum ar fi o rețetă ne-livrare prin specificarea fanionului „c” pe o astfel de rețetă. Acest lucru va face ca procmail să genereze o copie la indigo a mesajului prin livrarea acestuia către această rețetă, continuând totuși procesarea fișierului de configurare rc.
Utilizând un număr oarecare de rețete, vă puteți sorta extrem de simplu corespondența în mai multe dosare de corespondență. Rețineți faptul că corespondența poate sosi simultan în aceste dosare de corespondență (dacă se întâmplă să ruleze mai multe programe procmail în același timp, ceea ce nu este improbabil dacă sosește multă corespondență). Pentru a vă asigura că acest lucru nu duce la o dezordine, este foarte recomandată utilizarea adecvată a fișierelor de blocare.
Variabilele de mediu assignments și recipes pot fi amestecate liber în fișierul rc. Dacă o variabilă de mediu are o semnificație specială pentru procmail, aceasta va fi utilizată corespunzător în momentul în care este analizată (de exemplu, puteți schimba directorul curent oricând doriți prin specificarea unui nou MAILDIR, puteți schimba fișierele de blocare prin specificarea unui nou LOCKFILE, puteți schimba umask-ul în orice moment etc., posibilitățile sunt nelimitate :-).
Atribuirile și substituțiile acestor variabile de mediu sunt tratate exact ca în sh(1) (care include toate ghilimelele și eludările posibile), cu bonusul suplimentar că spațiile goale din jurul semnului „=” sunt ignorate și că, dacă o variabilă de mediu apare fără un „=” final, aceasta va fi eliminată din mediu. Orice program în ghilimele pornit de procmail va avea întregul mesaj la intrarea sa standard.
Comentarii¶
Un cuvânt care începe cu # și toate caracterele următoare până la o LINIE NOUĂ sunt ignorate. Acest lucru nu se aplică liniilor de condiție, care nu pot fi comentate.
Rețete¶
O linie care începe cu „:” marchează începutul unei rețete. Acesta are următorul format:
:0 [fanioane] [ : [fișier-blocare-locală] ] <zero sau mai multe condiții (una pe linie)> <exact o acțiune pe linie>
Condițiile încep cu un „*”, tot ce urmează după acest caracter este transmis către egrep-ul intern literal, cu excepția spațiilor albe anterioare și ulterioare. Aceste expresii regulate sunt compatibile complet cu expresiile regulate extinse normale egrep(1). A se vedea de asemenea Expresii regulate extinse.
Condițiile sunt operate prin ȘI logic (AND); dacă nu există condiții, rezultatul va fi implicit „true”.
Fanioane poate fi oricare dintre următoarele:
- H
- Execută egrep asupra antetului (implicit).
- B
- Execută egrep asupra corpului mesajului.
- D
- Îi indică egrep-ului intern să facă
distincția între majuscule și minuscule (spre
deosebire de opțiunea implicită, care ignoră
majusculele).
- A
- Această rețetă nu va fi executată decât
dacă sunt îndeplinite și condițiile de la
ultima rețetă precedentă (la nivelul curent de
enumerare a blocurilor) fără fanionul „A” sau
„a”. Acest lucru vă permite să
înlănțuiți acțiuni care depind de o
condiție comună.
- a
- Are aceeași semnificație ca și fanionul
„A”, cu condiția suplimentară ca rețeta
imediat anterioară să fi fost finalizată cu
succes înainte ca această rețetă să
fie executată.
- E
- Această rețetă se execută numai dacă
rețeta imediat anterioară nu a fost executată.
Executarea acestei rețete dezactivează, de asemenea, orice
rețetă imediat următoare cu fanionul
„E”. Acest lucru vă permite să
specificați acțiuni „else if”.
- e
- Această rețetă se execută numai dacă
rețeta imediat anterioară a eșuat (de exemplu,
linia de acțiune a fost încercată, dar a dus la o
eroare).
- h
- Trimite antetul către conductă, fișier sau
destinație de poștă electronică (implicit).
- b
- Trimite corpul către conductă, fișier sau
destinație de poștă electronică (implicit).
- f
- Consideră conducta ca pe un filtru.
- c
- Generează o copie la indigo a acestui mesaj. Acest lucru are
sens numai pentru rețetele de livrare. Singura
rețetă care nu livrează acest fanion are efect asupra
unui bloc de imbricare; pentru a genera o copie la indigo, acesta va
clona procesul procmail în curs de execuție
(fișierele de blocare nu vor fi moștenite), prin care clona
va proceda ca de obicei, iar părintele va sări peste bloc.
- w
- Așteaptă ca filtrul sau programul să se termine
și verifică codul de ieșire (în mod normal
ignorat); dacă filtrul nu are succes, atunci textul nu va fi
filtrat.
- W
- Are aceeași semnificație ca și fanionul
„w”, dar va suprima orice mesaj de „eșec al
programului” (Program failure).
- i
- Ignorați orice erori de scriere pe această
rețetă (adică, de obicei, din cauza unei conducte
închise mai devreme).
- r
- Modul brut, nu încearcă să se asigure că mesajul se termină cu o linie goală, îl scrie așa cum este.
Există câteva condiții speciale pe care le
puteți utiliza care nu sunt expresii regulate simple. Pentru a le
selecta, condiția trebuie să înceapă cu:
- !
- Inversează condiția.
- $
- Evaluează restul acestei condiții în conformitate cu
regulile de substituție sh(1) în interiorul
ghilimelelor duble, ignoră spațiul alb de la început,
apoi îl reanalizează.
- ?
- Utilizează codul de ieșire al programului specificat.
- <
- Verifică dacă lungimea totală a mesajului este mai
mică decât numărul specificat (în zecimal) de
octeți.
- >
- Analog cu „<”.
- nume-variabilă ??
- Compară restul acestei condiții cu valoarea acestei
variabile de mediu (care nu poate fi o pseudo-variabilă). Un caz
special este acela în care nume-variabilă este egal cu
„B”, „H”, „HB” sau
„BH”; acest lucru nu face decât să anuleze
zona de căutare implicită a antetului/corpului
definită de fanioanele inițiale ale acestei rețete.
- \
- Pentru a pune între ghilimele oricare dintre cele de mai sus la
începutul liniei.
Fișier de blocare local¶
Dacă puneți un al doilea „:” (la sfârșit) pe prima linie a rețetei, atunci procmail va utiliza un fișier de blocare local (numai pentru această rețetă). Opțional, puteți specifica fișierul de blocare local care urmează să fie utilizat; dacă nu o faceți însă, procmail va utiliza numele fișierului de destinație (sau numele fișierului care urmează primul „>>”) și va adăuga $LOCKEXT la acesta.
Linia de acțiune a rețetei¶
Linia de acțiune poate începe cu următoarele
caractere:
- !
- Trimite la toate adresele de poștă electronică
specificate.
- |
- Pornește programul specificat, eventual în $SHELL
dacă este reperat oricare dintre caracterele $SHELLMETAS.
Opțional, acest simbol de conductă poate fi precedat de
variabilă=, ceea ce va face ca ieșirea standard a
programului să fie capturată în mediul
variabilă (procmail NU va încheia prelucrarea
fișierului de configurare în acest moment). Dacă
specificați doar acest simbol de conductă,
fără niciun program, atunci procmail va trimite
corespondența la ieșirea standard.
- {
- Urmată de cel puțin un spațiu, un tabulator sau o linie nouă va marca începutul unui bloc de imbricare. Totul până la următoarea acoladăă de închidere va depinde de condițiile specificate pentru această rețetă. Este permisă imbricarea nelimitată. Acolada de închidere există doar pentru a delimita blocul, aceasta nu va determina în niciun fel terminarea procmail. Dacă se ajunge la sfârșitul unui bloc, procesarea va continua ca de obicei după bloc. La un bloc de imbricare, fanioanele „H” și „B” afectează doar condițiile care conduc la bloc, fanioanele „h” și „b” nu au niciun fel de efect
Orice altceva va fi considerat un nume de căsuță poștală [fie un nume de fișier, fie un director, absolut sau relativ la directorul curent (a se vedea MAILDIR)]. Dacă este un nume de fișier (posibil încă inexistent), mesajul va fi atașat la acesta.
Dacă este un director, mesajul va fi livrat într-un
fișier nou creat, garantat unic, numit $MSGPREFIX* în
directorul specificat. Dacă numele căsuței
poștale se termină în „/.”, atunci se
presupune că acest director este un dosar MH; adică,
procmail va utiliza următorul număr pe care îl
găsește disponibil. Dacă numele căsuței
poștale se termină în „/”, atunci se
presupune că acest director este un dosar maildir; adică,
procmail va livra mesajul într-un fișier dintr-un
subdirector numit „tmp” și îl va redenumi pentru
a fi în interiorul unui subdirector numit „new”.
Dacă căsuța poștală este
specificată ca fiind un dosar MH sau un dosar maildir,
procmail va crea directoarele necesare dacă acestea nu
există, în loc să trateze căsuța
poștală ca un nume de fișier inexistent. Atunci
când procmail livrează către directoare,
puteți specifica mai multe directoare către care să
livreze (procmail va face acest lucru utilizând
legături dure).
Valorile implicite ale variabilelor de mediu¶
- LOGNAME, HOME și SHELL
- Valorile implicite ale dvs. (ale destinatarului)
- PATH
- $HOME/bin :/usr/local/bin :/usr/bin :/bin (Cu excepția
procesării unui fișier „/etc/procmailrc”,
când va fi definită la `/usr/local/bin :/usr/bin :/bin'.)
- SHELLMETAS
- & |<>~;?*[
- SHELLFLAGS
- -c
- ORGMAIL
- /var/mail/$LOGNAME
(Cu excepția cazului în care -m a fost specificat, caz în care nu este definit)
- MAILDIR
- $HOME
(Cu excepția cazului în care numele primului fișier de configurare deschis cu succes începe cu „./” sau dacă a fost specificat -m, caz în care valoarea implicită este „.”)
- DEFAULT
- $ORGMAIL
- MSGPREFIX
- msg.
- SENDMAIL
- /usr/sbin/sendmail
- SENDMAILFLAGS
- -oi
- HOST
- Numele gazdei curente
- COMSAT
- no
(Dacă este specificat un fișier de configurare în linia de comandă)
- PROCMAIL_VERSION
- 3.23pre
- LOCKEXT
- .lock
Alte variabile de mediu șterse sau predefinite sunt IFS, ENV și PWD.
Din motive de securitate, la pornire procmail va
șterge toate variabilele de mediu care sunt suspectate de a modifica
comportamentul editorului de legături în timp de
execuție.
Mediu¶
Înainte de a vă pierde în multitudinea de
variabile de mediu, rețineți că toate acestea au valori
implicite rezonabile.
- MAILDIR
- Directorul curent în timp ce procmail se execută
(ceea ce înseamnă că toate rutele sunt relative la
$MAILDIR).
- DEFAULT
- Fișier mailbox implicit (dacă nu i se spune altfel,
procmail va descărca corespondența în
această căsuță poștală).
rocmail va utiliza automat $DEFAULT$LOCKEXT ca fișier de
blocare înainte de a scrie în această
căsuță poștală. Nu este necesar
să definiți această variabilă, deoarece
aceasta indică deja căsuța poștală
standard a sistemului.
- LOGFILE
- Acest fișier va conține, de asemenea, orice mesaj de eroare
sau diagnostic de la procmail (în mod normal, niciunul :-)
sau orice alt program inițiat de procmail. Dacă acest
fișier nu este specificat, orice mesaj de diagnosticare sau de
eroare va fi trimis înapoi expeditorului. A se vedea de asemenea
LOGABSTRACT.
- VERBOSE
- Puteți activa diagnosticarea extinsă prin definirea
acestei variabile la „yes” sau „on”, pentru a
o dezactiva din nou definiți-o la „no” sau
„off”.
- LOGABSTRACT
- Chiar înainte de a ieși din proces, procmail
înregistrează un rezumat al mesajului livrat în
$LOGFILE, indicând câmpurile „From ” și
„Subject:” din antet, folderul în care a ajuns
în final și lungimea (în octeți) a mesajului.
Prin definirea acestei variabile la „no”, generarea acestui
abstract este suprimată. Dacă o definiți la
„all”, procmail va înregistra un rezumat
pentru fiecare rețetă de livrare procesată cu
succes.
- LOG
- Orice valoare atribuită acestei variabile va fi
adăugată la $LOGFILE.
- ORGMAIL
- De obicei, cutia poștală de sistem (ORiGinal
MAILbox). În cazul în care, dintr-un motiv obscur
(cum ar fi „sistem de fișiere plin”), mesajul
nu a putut fi livrat, atunci această cutie poștală va
fi ultima soluție. În cazul în care procmail
nu reușește să salveze corespondența aici
(probleme foarte, foarte grave :-), atunci corespondența va fi
returnată expeditorului.
- LOCKFILE
- Fișier de semafor global. Dacă acest fișier
există deja, procmail va aștepta să
dispară înainte de a continua și îl va crea
singur (ștergându-l când este gata, desigur).
Dacă sunt specificate mai multe fișiere de blocare,
atunci cel anterior va fi eliminat înainte de a încerca
să îl creeze pe cel nou. Utilizarea unui fișier de
blocare global este descurajată; ori de câte ori este
posibil, utilizați în schimb fișiere de blocare
locale (pe bază de rețetă).
- LOCKEXT
- Extensie implicită care este adăugată la un
fișier de destinație pentru a determina ce
fișier-de-blocare local trebuie utilizat (numai dacă
este activat, pentru fiecare rețetă).
- LOCKSLEEP
- Numărul de secunde în care procmail va dormi
înainte de a încerca din nou pe un
fișier-de-blocare (dacă acesta există deja);
dacă nu este specificat, valoarea implicită este de 8
secunde.
- LOCKTIMEOUT
- Numărul de secunde care trebuie să fi trecut de când
un fișier de blocare a fost modificat/creat ultima
dată înainte ca procmail să decidă
că acesta trebuie să fie un fișier de blocare
rămas în mod eronat care poate fi eliminat cu forța
acum. Dacă este zero, atunci nu se va folosi niciun timp
limită și procmail va aștepta la
nesfârșit până când fișierul de
blocare este eliminat; dacă nu este specificat, valoarea
implicită este de 1024 de secunde. Această variabilă
este utilă pentru a preveni blocajele indefinite ale
sendmail/procmail. procmail este imun la decalajele de ceas
între mașini.
- TIMEOUT
- Numărul de secunde care trebuie să fi trecut înainte
ca procmail să decidă că un copil pe care l-a
inițiat trebuie să fie întrerupt. Programul în
cauză va primi un semnal TERMINATE de la procmail, iar
procesarea fișierului de configurare rc va continua. Dacă
este zero, nu se va utiliza niciun timp de așteptare, iar
procmail va aștepta la nesfârșit
până când programul copil se va încheia;
dacă nu este specificat, valoarea implicită este de 960 de
secunde.
- MSGPREFIX
- Prefixul numelui de fișier care este utilizat la livrarea
către un director (nu este utilizat la livrarea către un
„maildir” sau un director MH).
- HOST
- Dacă acesta nu este numele de gazdă al
mașinii, procesarea fișierului rc curent va
înceta imediat. Dacă au fost specificate alte fișiere
rc în linia de comandă, procesarea va continua cu
următorul fișier. Dacă toate fișierele rc sunt
epuizate, programul se va încheia, dar nu va genera o eroare
(adică, expeditorului i se va părea că
corespondența a fost livrată).
- UMASK
- Numele spune totul (dacă nu, atunci uitați de acesta :-).
Orice lucru atribuit lui UMASK este luat ca un număr octal.
Dacă nu este specificat, valoarea implicită a umask este
077. Dacă umask permite o+x, toate căsuțele
poștale la care procmail livrează direct vor primi o
schimbare de mod o+x. Acest lucru poate fi utilizat pentru a verifica
dacă au sosit mesaje noi.
- SHELLMETAS
- Dacă oricare dintre caracterele din SHELLMETAS apare în
linia care specifică un filtru sau un program, linia va fi
trimisă la $SHELL în loc să fie executată
direct.
- SHELLFLAGS
- Orice invocare a $SHELL va fi ca:
"$SHELL" "$SHELLFLAGS" "$*";
- SENDMAIL
- Dacă nu utilizați facilitatea forwarding, nu
vă faceți griji cu privire la aceasta. Aceasta
specifică programul care este apelat pentru a redirecționa
orice e-mail.
Este invocat ca: „$SENDMAIL” $SENDMAILFLAGS „$@”;
- NORESRETRY
- Numărul de reîncercări care trebuie făcute
dacă apare o eroare „process table full (tabel de
procese plin)”, „file table full (tabel de
fișiere plin)”, „out of memory (memorie
epuizată)” sau „out of swap
space(spațiu de interschimb epuizat)”. Dacă acest
număr este negativ, atunci procmail va reîncerca la
nesfârșit; dacă nu este specificat, valoarea
implicită este de 4 ori. Reîncercările au loc cu un
interval de secunde $SUSPEND. Ideea din spatele acestui lucru este
că dacă, de exemplu, spațiul de interschimb
„swap” a fost epuizat sau tabelul de
procese este plin, de obicei mai multe alte programe vor detecta
și ele acest lucru și vor abandona sau se vor bloca 8-),
eliberând astfel resurse valoroase pentru procmail.
- SUSPEND
- Numărul de secunde în care procmail va face o
pauză dacă trebuie să aștepte ceva ce nu este
disponibil în prezent (memorie, fork etc.); dacă nu este
specificat, va fi implicit 16 secunde. A se vedea și:
LOCKSLEEP.
- LINEBUF
- Lungimea tampoanelor interne de linii, nu poate fi stabilită mai
mică de 128. Toate liniile citite din fișierul rc nu
trebuie să depășească $LINEBUF caractere
înainte și după expansiune. Dacă nu este
specificată, valoarea implicită este 2048. Această
limită, desigur, nu se aplică mesajului propriu-zis,
care poate avea lungimi de linie arbitrare, sau ar putea fi un
fișier binar, de altfel. A se vedea, de asemenea,
PROCMAIL_OVERFLOW.
- DELIVERED
- Dacă este definită la „yes”, procmail
va pretinde (către agentul de poștă
electronică) că corespondența a fost livrată.
Dacă corespondența nu poate fi livrată după ce
a îndeplinit această sarcină (definită la
„yes”), corespondența va fi pierdută
(adică nu va fi returnată).
- TRAP
- Când procmail se termină din proprie
inițiativă și nu pentru că a primit un semnal,
va executa conținutul acestei variabile. O copie a mesajului poate
fi citită de la stdin. Orice ieșire produsă de
această comandă va fi anexată la $LOGFILE.
Utilizările posibile pentru TRAP sunt: eliminarea fișierelor
temporare, înregistrarea abstractelor personalizate etc. A se vedea
și EXITCODE și LOGABSTRACT.
- EXITCODE
- În mod implicit, procmail returnează un cod de
ieșire de zero (succes) dacă a livrat cu succes mesajul sau
dacă variabila HOST a fost lipsă și nu mai
existau alte fișiere rc în linia de comandă;
în caz contrar, returnează eșec. Înainte de a
face acest lucru, procmail examinează valoarea acestei
variabile. Dacă este definită la o valoare numerică
pozitivă, procmail va utiliza în schimb
această valoare drept cod de ieșire. Dacă
această variabilă este definită, dar goală
și TRAP este definită, procmail va stabili
codul de ieșire la valoarea returnată de programul
TRAP. Dacă această variabilă nu este
definită, procmail o va defini cu puțin timp
înainte de a apela programul TRAP.
- LASTFOLDER
- Această variabilă este atribuită de procmail
ori de câte ori livrează către un dosar sau program.
Aceasta conține întotdeauna numele ultimului dosar (sau
program) la care procmail a livrat. În cazul în care ultima
livrare a fost către mai multe dosare de directoare
împreună, $LASTFOLDER va conține numele
fișierelor vinculate ca o listă separată prin
spații.
- MATCH
- Această variabilă este atribuită de procmail
ori de câte ori i se cere să extragă textul ce
corespunde cu o expresie regulată. Aceasta va conține tot
textul care corespunde expresiei regulate după semnul
„\/”.
- SHIFT
- Atribuirea unei valori pozitive acestei variabile are același efect
ca și comanda „shift” din sh(1).
Această comandă este foarte utilă pentru a extrage
argumentele suplimentare transmise către procmail atunci
când acționează ca un filtru de poștă
electronică generic.
- INCLUDERC
- Numește un fișier rc (relativ la directorul curent) care va
fi inclus aici ca și cum ar face parte din fișierul rc
curent. Imbricarea este permisă și limitată doar de
resursele sistemului (memorie și descriptori de fișiere).
Deoarece nu se verifică permisiunile sau proprietarul
fișierului rc, utilizatorii INCLUDERC trebuie să se
asigure că numai utilizatorii de încredere au acces
în scris la fișierul rc inclus sau la directorul în
care se află acesta. Atribuirile liniei de comandă
către INCLUDERC nu au niciun efect.
- SWITCHRC
- Numește un fișier rc (relativ la directorul curent)
în care va fi transferată procesarea. Dacă
fișierul rc numit nu există sau nu este un fișier
normal sau este „/dev/null”, atunci se va înregistra
o eroare și procesarea va continua în fișierul rc
curent. În caz contrar, procesarea fișierului rc curent va
fi întreruptă, iar fișierul rc numit va fi pornit.
Dezactivarea SWITCHRC anulează procesarea fișierului
rc curent ca și cum s-ar fi încheiat la atribuire. Ca
și în cazul INCLUDERC, nu se efectuează nicio
verificare a permisiunilor sau a proprietarului fișierului rc, iar
atribuirile din linia de comandă nu au niciun efect.
- PROCMAIL_VERSION
- Numărul de versiune al binarului procmail care rulează.
- PROCMAIL_OVERFLOW
- Această variabilă va fi definită la o valoare
nevidă dacă procmail detectează o
depășire a memoriei tampon. Consultați
secțiunea ERORI de mai jos pentru alte detalii privind
funcționarea atunci când se produce o depășire
de capacitate.
- COMSAT
- Notificarea Comsat(8)/biff(1) este activată în
mod implicit; aceasta poate fi dezactivată prin definirea acestei
variabile la „no”. Ca alternativă, biff-service poate
fi personalizat prin definirea lui fie la „service@”,
„@hostname” sau „service@hostname”. Atunci
când nu este specificată, valoarea implicită este
biff@localhost.
- DROPPRIVS
- Dacă este definită la „yes”, procmail
va renunța la toate privilegiile pe care le-ar fi putut avea (suid
sau sgid). Acest lucru este util numai dacă doriți să
garantați că jumătatea inferioară a
fișierului „/etc/procmailrc” este executată
în numele destinatarului.
Expresii regulate extinse¶
Următoarele simboluri sunt cunoscute atât de
egrep-ul intern al procmail, cât și de egrep-ul
standard egrep(1) (atenție, unele implementări ale
egrep-ului includ alte extensii non-standard; în special, operatorul
de repetiție { nu este acceptat de egrep-ul procmail-ului):
- ^
- Începutul unei linii.
- $
- Sfârșitul unei linii.
- .
- Orice caracter, cu excepția unei linii noi.
- a*
- Orice secvență de zero sau mai multe a-uri.
- a+
- Orice secvență de una sau mai multe a-uri.
- a?
- Fie zero, fie una a.
- [^-a-d]
- Orice caracter care nu este fie o liniuță, fie a, b,
c, d sau o linie nouă.
- de|abc
- Fie secvența „de”, fie secvența
„abc”.
- (abc)*
- Zero sau de mai multe ori secvența „abc”.
- \.
- Potrivește un singur punct; utilizați \ pentru a cita oricare dintre caracterele magice pentru a elimina semnificația lor specială. A se vedea ,de asemenea, $\ înlocuirea variabilei.
Acestea au fost doar mostre, desigur, orice combinație mai complexă este de asemenea valabilă.
Următoarele semnificații ale simbolurilor sunt
extensii procmail speciale:
- ^ sau $
- Potrivește o linie nouă (pentru potriviri pe mai multe
linii).
- ^^
- Ancorarea expresiei chiar la începutul zonei de căutare sau,
dacă este întâlnită la sfârșitul
expresiei, ancorarea acesteia chiar la sfârșitul zonei de
căutare.
- \< sau \>
- Potrivește caracterul dinainte sau după un cuvânt.
Acestea sunt doar o abreviere pentru „[^a-zA-Z0-9_]”, dar se
pot potrivi și cu liniile noi. Deoarece corespund caracterelor
reale, sunt potrivite doar pentru delimitarea cuvintelor, nu și
pentru delimitarea spațiului dintre cuvinte.
- \/
- Împarte expresia în două părți. Tot
ceea ce corespunde părții drepte va fi atribuit variabilei
de mediu MATCH.
EXEMPLE¶
Consultați pagina de manual procmailex(5).
AVERTISMENTE¶
Liniile de continuare dintr-o linie de acțiune care specifică un program trebuie să se încheie întotdeauna cu o bară oblică inversă, chiar dacă shell-ul subiacent nu ar avea nevoie sau nu ar dori ca bara oblică inversă să indice continuarea. Acest lucru se datorează procesului necesar de analiză în două treceri (mai întâi procmail, apoi shell-ul (sau nu, în funcție de SHELLMETAS)).
Nu puneți comentarii pe liniile de condiție de expresie regulată dintr-o rețetă, aceste linii sunt transmise către egrep-ul intern literalmente (cu excepția barelor oblice de continuare de la sfârșitul unei linii).
Spațiile albe de la începutul liniilor de condiție ale expresiilor regulate continue sunt de obicei ignorate (astfel încât acestea să poată fi indentate), dar nu pe liniile de condiție continue care sunt evaluate în conformitate cu regulile de substituție sh(1) în interiorul ghilimelelor duble.
Aveți grijă la blocajele mutuale (interblocaje) atunci când faceți lucruri nesănătoase, cum ar fi redirecționarea corespondenței către propriul cont. Blocajele mutuale pot fi întrerupte prin utilizarea corectă a LOCKTIMEOUT.
Orice valori implicite pe care procmail le are pentru unele variabile de mediu vor înlocui întotdeauna pe cele care au fost deja definite. Dacă doriți cu adevărat să treceți peste valorile implicite, trebuie fie să le introduceți în fișierul rc, fie în linia de comandă ca argumente.
Fișierul „/etc/procmailrc” nu poate modifica configurarea PATH văzută de utilizatorul fișierelor rc, deoarece valoarea este restabilită atunci când procmail termină de citit fișierul „/etc/procmailrc”. Deși sunt așteptate îmbunătățiri viitoare în acest domeniu, recompilarea procmail cu valoarea dorită este în prezent singura soluție corectă.
Variabilele de mediu definite în interiorul părții de acțiune „|” interpretată de shell a unei rețete nu își vor păstra valoarea după terminarea rețetei, deoarece acestea sunt definite într-o subshell a procmail. Pentru a vă asigura că valoarea unei variabile de mediu este păstrată, trebuie să plasați atribuirea variabilei înainte de partea introductivă „|” a unei rețete, astfel încât să poată captura ieșirea standard a programului.
Dacă specificați doar un fanion „h”
sau „b” pentru o rețetă de livrare, iar
rețeta se potrivește, atunci, dacă nu este prezent
și fanionul „c”, corpul, respectiv antetul mesajului va
fi pierdut în mod silențios.
CONSULTAȚI ȘI¶
procmail(1), procmailsc(5), procmailex(5), sh(1), csh(1), mail(1), mailx(1), uucp(1), aliases(5), sendmail(8), egrep(1), regexp(5), grep(1), biff(1), comsat(8), lockfile(1), formail(1)
ERORI¶
Singurele substituiri ale variabilelor de mediu care pot fi gestionate de procmail sunt de tipul $name, ${name}, ${name:-text}, ${name:+text}, ${name-text}, ${name+text}, $\name, $#, $n, $$, $? , $_, $- și $=; unde $\name va fi înlocuit cu echivalentul lui $name dezarmat de toate caracterele expresiei regulate magice, $_ cu numele fișierului rc curent, $- cu $LASTFOLDER și $= va conține numărul ultimei rețete. În plus, rezultatul substituirii $\name nu va fi niciodată divizat pe spațiu alb. Atunci când sunt utilizate opțiunile -a sau -m, $# se va extinde la numărul de argumente astfel specificate, iar "$@" (ghilimelele sunt obligatorii) se va extinde la argumentele specificate. Cu toate acestea, "$@" va fi extins numai atunci când este utilizat în lista de argumente a unui program, și atunci va fi extinsă numai o singură astfel de apariție.
Expansiunile variabilelor nepuse între ghilimele efectuate de procmail sunt întotdeauna împărțite pe caractere de spațiu, tabulatoare și linie nouă; variabila IFS nu este utilizată intern.
Procmail nu oferă suport pentru extinderea lui „~”.
La procesarea fișierului rc se utilizează un tampon de linie cu lungimea $LINEBUF, orice expansiune care nu se încadrează în această limită va fi trunchiată și se va configura PROCMAIL_OVERFLOW. Dacă linia care se debordează este o condiție sau o linie de acțiune, atunci aceasta va fi considerată eșuată și procmail va continua procesarea. Dacă este o linie de atribuire a unei variabile sau o linie de începere a unei rețete, atunci procmail va întrerupe întregul fișier rc.
Dacă fișierul de blocare global are o rută relativă, iar directorul curent nu este același ca atunci când a fost creat fișierul de blocare global, atunci fișierul de blocare global nu va fi eliminat dacă procmail iese în acel moment (remediu: utilizați rute absolute pentru a specifica fișierele de blocare globale).
Dacă un fișier rc are o rută relativă și când fișierul rc este deschis pentru prima dată MAILDIR conține o rută relativă și dacă la un moment dat procmail este instruit să se cloneze și directorul curent s-a schimbat de când a fost deschis fișierul rc, atunci procmail nu va putea să se cloneze (remediu: utilizați o rută absolută pentru a face referire la fișierul rc sau asigurați-vă că MAILDIR conține o rută absolută când este deschis fișierul rc).
Un fișier-blocare-local în rețetă care marchează începutul unui bloc imbricat fără bifurcare nu funcționează conform așteptărilor.
Atunci când se capturează ieșirea standard de la o rețetă într-o variabilă de mediu, va fi eliminată exact o linie nouă finală.
Unele expresii regulate neoptimale și neevidente stabilesc
MATCH la o valoare incorectă. Expresia regulată poate fi
pusă în funcțiune prin eliminarea unuia sau mai multor
operatori '*', '+', sau '?' nejustificați din partea
stângă a simbolului \/.
DIVERSE¶
Dacă expresia regulată conține secvența „^TO_”, aceasta va fi înlocuită de `(^((Original-)?(Resent-)?(To |Cc |Bcc) |(X-Envelope |Apparently(-Resent)?)-To) :(.*[^-a-zA-Z0-9_.])?)', care ar trebui să prindă toate specificațiile de destinație care conțin o anumită adresă.
Dacă expresia regulată conține secvența „^TO”, aceasta va fi înlocuită de `(^((Original-)?(Resent-)?(To |Cc |Bcc) |(X-Envelope |Apparently(-Resent)?)-To) :(.*[^a-zA-Z])?)', care ar trebui să prindă toate specificațiile de destinație care conțin un anumit cuvânt.
Dacă expresia regulată conține secvența „^FROM_DAEMON”, aceasta va fi înlocuită de `(^(Mailing-List : |Precedence :.*(junk |bulk |list) |To : Multiple recipients of |(((Resent-)?(From |Sender) |X-Envelope-From) : |>?From )([^>]*[^(.%@a-z0-9])?(Post(ma?(st(e?r)? |n) |office) |(send)?Mail(er)? |daemon |m(mdf |ajordomo) |n?uucp |LIST(SERV |proc) |NETSERV |o(wner |ps) |r(e(quest |sponse) |oot) |b(ounce |bs\.smtp) |echo |mirror |s(erv(ices? |er) |mtp(error)? |ystem) |A(dmin(istrator)? |MMGR |utoanswer))(([^).! :a-z0-9][-_a-z0-9]*)?[%@>\t ][^<)]*(\(.*\).*)?)?$([^>] |$)))', care ar trebui să captureze e-mailurile provenite de la majoritatea demonilor (ce ziceți de o expresie regulată :-).
Dacă expresia regulată conține secvența „^FROM_MAILER”, aceasta va fi înlocuită de `(^(((Resent-)?(From |Sender) |X-Envelope-From) : |>?From )([^>]*[^(.%@a-z0-9])?(Post(ma(st(er)? |n) |office) |(send)?Mail(er)? |daemon |mmdf |n?uucp |ops |r(esponse |oot) |(bbs\.)?smtp(error)? |s(erv(ices? |er) |ystem) |A(dmin(istrator)? |MMGR))(([^).! :a-z0-9][-_a-z0-9]*)?[%@>\t ][^<)]*(\(.*\).*)?)?$([^>] |$))' (o versiune simplificată a `^FROM_DAEMON'), care ar trebui să prindă e-mesajele provenite de la majoritatea demonilor de poștă electronică.
Atunci când se atribuie valori booleene unor variabile precum VERBOSE, DELIVERED sau COMSAT, procmail acceptă ca adevărat orice șir care începe cu: o valoare diferită de zero „on”, „y”, „t” sau „e”. Fals este orice șir care începe cu: o valoare zero, „off”, „n”, „f” sau „d”.
Dacă linia de acțiune a unei rețete specifică un program, o singură pereche bară_oblică_inversă-linie_nouă pe o linie goală va fi transformată într-o linie nouă.
Motorul de expresii regulate încorporat în
procmail nu acceptă clase de caractere cu nume.
NOTE¶
Deoarece spațiul alb de la începutul liniilor nepus între ghilimele este în general ignorat în fișierul rc, puteți indenta totul după gust.
Indicativul „|” de pe linia de acțiune pentru a specifica un program sau un filtru este eliminat înainte de verificarea pentru $SHELLMETAS.
Fișierele incluse cu directiva INCLUDERC care conțin numai atribuiri de variabile de mediu pot fi partajate cu sh.
Comportamentul actual al alocărilor pe linia de comandă pentru INCLUDERC și SWITCHRC nu este garantat, a fost deja modificat o dată și poate fi modificat din nou sau eliminat în versiunile viitoare.
Pentru procesarea cu adevărat complicată, puteți lua în considerare chiar apelarea recursivă a procmail.
Pe vremuri „:0”, care marchează
începutul unei rețete, trebuia schimbat în
„:n”, unde „n” indica numărul de
condiții care urmează.
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.
2001/08/04 | BuGless |