Utilizarea procmail pentru a gestiona poșta

După obținerea codului sursă pentru program, trebuie să îl dezarhivați pentru a instala cu următoarea comandă: tar -xzvf procmail.tar.gz

Totuși, existența opțiunii BASENAME în Makefile este menționată de obicei. Cu această opțiune, specificăm directorul de bază la care va fi instalat procmail. Din directorul de bază specificat de noi, vor merge și alte directoare, cum ar fi bin și om.

În cele din urmă, pentru a compila pachetul, trebuie să executați instalarea.

Procmail poate fi instalat pentru întregul sistem și apoi invocat cu o regulă sendmail (8). sau poate fi instalat de orice utilizator pentru uz personal. În acest din urmă caz, utilizatorul specifică utilizarea procmail în fișierul .forward. unde ar trebui să existe o linie similară cu următoarea:

| IFS = '' exec / home / juan / procmail / bin / procmail -f- || ieșire 75 # juan

În această linie, am presupus că utilizatorul juan a instalat procmail în directorul său de acasă HOME. Pentru această linie specială, BASENAME. care este specificată la momentul compilării, va fi / home / juan / procmail.

Funcții principale

Procmail citește din datele sale standard. Verifică fișierul de configurare .procmailrc. care trebuie să fie în directorul de acasă al utilizatorului. Acest fișier definește câteva reguli care spun procmail ce acțiuni trebuie luate după primirea mesajului. El poate decide ce să facă cu el - salvați-l, ignorați-l, răspunde automat, etc. - verificarea unor linii în antetul mesajului.

În plus, procmail ne permite să procesăm automat e-mailurile sau e-mailurile stocate într-un fișier.

configurație

Se utilizează fișierul de configurare .procmailrc și trebuie să fie în directorul HOME.

Linii care încep cu: 0 sau: 0: indică începutul unei noi reguli care spune procmail ce să facă cu mesajul.

Linii care încep cu *. desemnează condiția pentru îndeplinirea regulii. Procmail utilizează acest mecanism pentru a determina mesajul care trebuie procesat de această regulă.

Rândurile rămase, adică cele care nu încep cu: sau * sunt tratate ca comenzi sau, cu alte cuvinte, acțiunile lui procmail care satisfac condiția. Unele acțiuni sau comenzi posibile pot fi șterse mesajul, transmite mesajul, salvați mesajul etc.

Primul pas este să specificați câteva variabile de mediu în .procmailrc, aici sunt câteva dintre variabilele pe care le-aș recomanda să le definiți în .procmailrc

MAILDIR
Specifică directorul în care procmail salvează fișiere cu mesaje de e-mail. De obicei, această variabilă indică $ HOME / mail sau $ HOME / Mail. Acest director sau acel director depinde de clientul de e-mail pe care îl utilizați.

LOGFILE
Indică numele fișierului jurnal în care procmail înregistrează toate operațiile efectuate.

sendmail
Indică locul unde se găsește sendmail, care este folosit pentru a răspunde automat la mesaje.

formail
Indică unde să găsești formail. Acest program este distribuit cu procmail și sarcina acestuia este de a schimba anteturile de e-mail sau de a reformula mesajul pentru trimitere sau salvare.

DEFAULT
Fișierul în care este salvat mesajul dacă procmail nu poate aplica reguli definite la acesta.

Puteți defini o variabilă de mediu oriunde .procmailrc. Dacă variabila este scrisă fără simbolul =. urmată de o valoare, atunci această variabilă este ștearsă.

În ceea ce privește regulile, ele sunt împărțite în două grupuri: Primul presupune că după aplicarea lor mesajul este livrat, iar restul.

Primele reguli sunt simple, după procesare se presupune că nu se aplică reguli suplimentare pentru acest mesaj și, prin urmare, mesajul este considerat livrat.

Al doilea tip de reguli, adică, cei care nu ia în considerare mesajul transmis după prelucrare, este foarte util atunci când se utilizează mai multe reguli și de proces de mai multe ori înainte de livrare a aceluiași mesaj.

Sintaxa generală a regulii este:

Să trecem prin fiecare parte și să analizăm structura sa. În primul rând, fiecare regulă începe cu: 0. atunci oricare dintre aceste opțiuni poate urma:

H Condiția se aplică antetului de e-mail.
B Starea este căutată în corpul mesajului.
D Această condiție înseamnă că registrele superioare și inferioare sunt diferite.
A Această regulă se aplică numai atunci când a fost aplicată ultima.
a Like A. cu excepția faptului că nu trebuie să existe erori la aplicarea regulii de eroare anterioare.
E Această regulă este executată dacă cea anterioară nu a fost aplicată.
e Această regulă va fi executată dacă cea anterioară a fost executată, însă sa încheiat cu erori.
h Antetul mesajului este trimis comenzii.
b Corpul mesajului este trimis comenzii.
f Comanda este interpretată ca un filtru.
c Efectuați o copie a mesajului cc. Atunci când se aplică această regulă, se presupune că mesajul este livrat cu acest steag și după livrare se pot aplica și alte reguli pentru copia mesajului.
w Așteptați finalizarea comenzii pentru a obține rezultatul.
W În afară de opțiunea anterioară, dar în caz de eroare, nu emiteți niciun mesaj.
Ignoră posibilele greșeli.
r scrie mesajul așa cum este. Verificați dacă nu se execută un șir gol.

În mod implicit, dacă nu este specificată nici o opțiune, condiția este aplicată antetului mesajului (opțiunea H). La intrarea standard a comenzii mergeți atât antetul, cât și corpul mesajului (opțiunile h și g). Registrele superioare și inferioare nu diferă.

După: 0 și opțiunile posibile pot urma a doua :. Dacă da, aceasta indică faptul că fișierul de destinație în care urmează să fie scris mesajul trebuie blocat pentru a evita situația când două procese scriu simultan într-un singur fișier. Puteți specifica un fișier pentru a fi utilizat ca fișier blocant.

Apoi, există condițiile, câte unul pe linie, și înainte de fiecare simbol * este pus. Condițiile sunt de obicei scrise sub formă de expresii regulate pentru a determina secvența de caractere din antetul sau corpul mesajului. Expresia obișnuită, printre altele, folosește următoarele caractere:

^ Începutul liniei.
$ Sfârșit de linie.
. Orice caracter, cu excepția caracterelor de retur.
* Zero sau de mai multe ori.
+ De una sau de mai multe ori.
? Zero sau mai multe ori.
[a-z] O gamă de caractere, în acest caz de la a la z.
[^ a-z] Orice caracter din afara domeniului de la a la z.
a | b sau 'a' sau 'b'

După condiții există o echipă. Dacă primul caracter al comenzii este unul dintre următoarele, se presupune un comportament special:

Mesaje liste

Procmail rezolvă această problemă pur și simplu. Putem folosi fișierul .procmailrc cu următoarele reguli foarte simple pentru sortarea corespondenței noastre din diferite liste de discuții Linux:

Studiem cu atenție una dintre aceste reguli. Dacă înțelegeți principiul intern al funcționării unei reguli, va fi ușor să înțelegeți restul, deoarece mecanismul de bază rămâne același.

Începutul este linia: 0. care marchează începutul unei noi reguli. Alte opțiuni nu sunt specificate, astfel încât regula procmail ia opțiunile implicite: majuscule și minuscule nu se disting, condiția se aplică doar antetul e-mail, comanda primește atât antetul și corpul mesajului.

Următorul rând conține o condiție care, de când a fost menționată anterior, este întotdeauna recunoscută, deoarece primul caracter este *. Condiția este următoarea expresie regulată:

Argumentul ^ din substring spune procmail că este necesar să căutați aceste linii după substringul From.

Următorul caracter. * Indică orice număr de caractere. Anterior am observat că în expresia regulată simbolul "" este echivalent cu orice caracter și * denumește zero sau mai mult. Prin urmare, * înseamnă că după inițial De acolo pot fi zero sau mai multe personaje.

Dacă vă gândiți puțin la această expresie regulată, veți înțelege că această regulă va "calcula" următoarele rânduri:

Următoarea linie este comanda (sau acțiunea) și indică ce să facă cu mesajul. În acest caz, se presupune că îl salvezi în fișierul linux-mx. Dacă calea absolută a fișierului nu este specificată, în mod implicit se presupune că este adăugată la variabila de mediu $ MAILDIR.

Răspuns automat

Pentru a face acest lucru, scrieți o regulă care tratează orice cerere PGP ca o interogare, în linia de subiect a căruia există un șir PGP. Această regulă poate fi scrisă ca:

Aceeași idee este folosită pentru a scrie un program obișnuit care spune oamenilor că suntem în concediu și că vom răspunde mesajului lor poștal la întoarcere:

În ultimul caz, nu există condiții, deoarece toate mesajele vor primi aceleași răspunsuri.

Cum să evitați buclele de răspuns automat

formail -r -A "X-Buclă: [email protected]"

Această regulă împiedică buclele, deoarece orice mesaj care conține un buclă X în antet nu va satisface condițiile și, ca urmare, procmail nu va răspunde la acesta.

Decodificarea fișierelor

O altă regulă interesantă a .procmailrc-ului nostru poate fi decodificarea corespondenței primite, codată în mod automat de uuencode (1). Această regulă poate fi definită ca:

Acest lucru este specificat explicit în opțiunea B. Condiția regulii trebuie să se aplice numai corpului mesajului.

Dacă regula constată un șir care începe cu linia "begin 644", atunci aceasta înseamnă că este începutul fișierului codificat de uuencode (1). astfel încât variabila de mediu MAILDIR este setată. care este echivalentă cu schimbarea directorului indicat de această variabilă. De acum încolo, toate acțiunile pentru ieșirea mesajelor vor fi efectuate ținând cont de directorul de bază specificat. În cazul nostru, avem nevoie ca mesajele primite să fie stocate în $ HOME / fișiere.

În continuare apare regula necondiționată, care trimite doar un mesaj către canal pentru decodare. Fișierul sursă va fi trimis la $ HOME / fișiere.

concluzie

Aș dori să cred că după acest scurt curs de introducere în procmail a devenit clar faptul că procmail este extrem de flexibil și poate ajuta la gestionarea corespondenței noastre foarte simplu și convenabil. Aș recomanda să experimentați expresii și reguli regulate, adaptându-le la nevoile dvs., deoarece capacitățile procmail se extind mult mai mult decât am putea discuta în această scurtă introducere.

Articole similare