Scroll to navigation

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:

Execută egrep asupra antetului (implicit).
Execută egrep asupra corpului mesajului.
Îi indică egrep-ului intern să facă distincția între majuscule și minuscule (spre deosebire de opțiunea implicită, care ignoră majusculele).
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ă.
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ă.
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”.
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).
Trimite antetul către conductă, fișier sau destinație de poștă electronică (implicit).
Trimite corpul către conductă, fișier sau destinație de poștă electronică (implicit).
Consideră conducta ca pe un filtru.
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.
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.
Are aceeași semnificație ca și fanionul „w”, dar va suprima orice mesaj de „eșec al programului” (Program failure).
Ignorați orice erori de scriere pe această rețetă (adică, de obicei, din cauza unei conducte închise mai devreme).
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 „<”.
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

Valorile implicite ale dvs. (ale destinatarului)
$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'.)
& |<>~;?*[
-c
/var/mail/$LOGNAME
(Cu excepția cazului în care -m a fost specificat, caz în care nu este definit)
$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 „.”)
$ORGMAIL
msg.
/usr/sbin/sendmail
-oi
Numele gazdei curente
no
(Dacă este specificat un fișier de configurare în linia de comandă)
3.23pre
.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.

Directorul curent în timp ce procmail se execută (ceea ce înseamnă că toate rutele sunt relative la $MAILDIR).
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.
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.
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”.
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.
Orice valoare atribuită acestei variabile va fi adăugată la $LOGFILE.
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.
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ă).
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ă).
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.
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.
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.
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).
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ă).
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.
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.
Orice invocare a $SHELL va fi ca:
"$SHELL" "$SHELLFLAGS" "$*";
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 „$@”;
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 interschimbswap” 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.
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.
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.
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ă).
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.
Î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.
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.
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 „\/”.
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.
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.
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.
Numărul de versiune al binarului procmail care rulează.
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.
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.
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.
Orice secvență de zero sau mai multe a-uri.
Orice secvență de una sau mai multe a-uri.
Fie zero, fie una a.
[^-a-d]
Orice caracter care nu este fie o liniuță, fie a, b, c, d sau o linie nouă.
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