Procmail

Allikas: Kuutõrvaja

Procmail

Procmaili kasutatakse postimasinasse tulnud kirjade kasutajate vahel laialijaotamiseks. Näiteks vaikimisi lisatakse kasutajale priit saabunud e-post juurde faili /var/spool/mail/priit, millele vastab Pine'i kirjakast INBOX.

Kasutajal on võimalik häälestada Procmail nii, et talle saabunud e-post salvestatakse teatud tunnuste alusel kasutaja postikataloogi erinevatesse failidesse. Postikataloogi faile käsitleb Pine kirjakastidena. Lisaks on võimalik käivitada konfiguratsioonis näidatud tingimustel programme, näiteks selleks, et saabunud oluline post edasi saata mobiiltelefonile teatena.

Kui kasutatavas süsteemis Procmail ei ole kohalik meiler, siis saab kasutaja seda enda jaoks käivitada, kirjutades faili ~/.forward näiteks rea

| exec /usr/local/bin/procmail

või

"|IFS=' '&&exec /usr/local/bin/procmail -f-||exit 75"

Võib ka otse alias faili kirjutada stiilis

ants:            "|/usr/local/bin/procmail -m /etc/mail/reeglid-aadressile"

Kasutaja Procmaili konfiguratsioonifail

Konfiguratsioonifailis ~/.procmailrc on kirjas reeglid, mille järgi saabuva e-postiga tegeldakse. Reegleid kirjutatakse järgmise süntaksi alusel

0: [ võtmed ]
* tingimus
käsu rida

Tingumus esitatakse regulaaravaldisena, milles saab kasutada laiendatud metasümbolite hulka.

Toome näiteks ühe reegli ja selgitame

:0 HB
* Z|zoo
ZOO

Reegli algust märgib :0, mille järele kirjutatakse võtmed. Tingimust alustab tärn, millele järgneb regulaaravaldis. 'Z|zoo' tähendab, et reegel rakendub neile kirjadele, mille sisus (B) või päises (H) leidub regulaaravaldisega klappiv rida. Antud juhul klapivad stringe 'Zoo' või 'zoo' sisaldavad read. Käsu reale kirjutatud stringi tõlgendatakse faili nimena, kuhu kiri salvestatakse. Antud juhul faili ZOO.

Konfiguratsioonifailis võib esitada mitmeid reegleid, mida kontrollitakse järgemisi. Tegutsetakse vastavalt esimesele sobivale, ignoreerides järgnevaid. Konfiguratsioonifaili alguses saab defineerida mõned spetsiifilised keskkonnamuutujad:

MAILDIR=$HOME/mail
DEFAULT=$MAILDIR/allumatud
LOGFILE=$MAILDIR/logi
MAILDIR - kasutaja postikataloog 
DEFAULT - fail, kuhu salvestakse kirjad, millele ühtegi reeglit ei rakendunud 
LOGFILE - veateated Procmaililt või programmidelt, mille Procmail käivitas 

Võimalik on haakida külge veel lisaseadistusfaile näiteks selliselt

INCLUDERC=/etc/email/proc-vacation

Kirjade jagamine failidesse

Esitame ühe tervikliku näite, kuidas sorteerida saabunud kirju. Failidesse paigutamine toimub Subjecti ja Senderi rea alusel. Kirjad, millele reeglid ei rakendu, salvestatakse faili allumatud ja logi faili logi. Vaikimisi kasutavad reeglid kirja päist.

:0:
* ^Subject: test
/home/kasutaja/mail/test

:0:
* ^Subject.*\[ZOO
ZOO

:0:
* ^Subject.*\[linux\]
LINUX

:0:
* ^Sender.*owner-zoo-chat
ZOO-CHAT

:0:
* ^From: scam@cyberspam\.com
/dev/null


Spämmitõrje nagu amavisd-clamav lisab vastavalt kirja päisesse enda antud skoori, selle alusel procmailiga filtreerimine käiks järgnevalt.

:0:
* ^X-Spam-Level: \*\*\*
/home/kasutaja/REOSTUS

:0:
! kasutaja

Faili REOSTUS asemel võib muidugi ka otse /dev/null suunata'

Võib defineerida samuti midagi ette võtma sellisel juhul

* ^X-Spam-Status: Yes

Automaatvastaja seadistus

Järgneva bloki võib lisada enda procmaili faili lõppu

Eelnevalt installitud peaks olema ka formail

##===================================================
##            Algab puhkuserobot
##===================================================
:0 Whc: vacation.lock
* !^FROM_DAEMON
| /usr/local/bin/formail -rD 8192 vacation.cache

:0 ehc         # if the name was not in the cache
| (/usr/local/bin/formail -rA"Precedence: junk" \
   -A"X-Loop: mari@zoo.edu.ee" ; \
   echo "Automaatne vastus: mari@zoo.edu.ee on postkastist kaugel."; \
   echo "Palun saatke kiiret reageerimist vajavad kirjad aadressile priit@zoo.edu.ee."  \
) | /usr/sbin/sendmail -oi -t
##===================================================
##            Loppes puhkuserobot
##===================================================

Tekst mis saadetakse siis automaatselt roboti poolt on siis antud näiteks

  echo "Automaatne vastus: mari@zoo.edu.ee on postkastist kaugel."; \
  echo "Palun saatke kiiret reageerimist vajavad kirjad aadressile priit@zoo.edu.ee."  \

See tuleks siis muuta endale sobilikuks. Teksti lisada saab lihtsalt lisades lihtsalt ridu

echo "mingi tekst" \

Igakord kui robot saadab kellelegi meili kirjutab ta sama aadressi ka faili vacation.cache see on vajalik selleks ,et korduvalt ei saadaks robot oma teadet samale kirjasaatjale vaid peale esimest teavitamist vaikiks :)

Programmi käivitamine

Reegli käsu real saab näidata toru järel üksteisest semikooloniga eraldatud programmide nimed, mis tuleb käivitada reegli rakendumisel. Esimese programmi sisendisse suunatakse kõnealune e-kiri. Näiteks selline reegel riputab presidendilt tulnud e-kirja veebi üles

:0
* ^From.*president
| sed -e '$r /home/priit/algus' -e '1,/^$/d' -e '$r /home/imre/lopp' > \
~/public_html/presidendilt.html; chmod 755 ~/public_html/presidendilt.html

Failides algus ja lopp sisalduvad vastavalt HTML dokumendi alguses ja lõpus olema peavad käsud. Kaalutud kirjade jaotamine

Procmail võimaldab anda kirjale punkte vastavalt sellele, mis kirjas sisaldub. Kui punktide summa ehk skoor on positiivne, siis rakendatakse reeglit.

Punkte antakse geomeetrilise jada n esimese liikme summa valemi alusel

                         n
          n   k-1        x - 1
S  = w * Sum x    = w * -------
 n       k=1             x - 1

Näiteks kolme esimese liikme summa

S  = w + w * x + w * x * x
 3

Kusjuures kogu jada summa arvutatakse sellise valemi järgi

       w
S = -------
     1 - x

w - jada esimene liige x - jada tegur

Kogu jada summa on vajalik maksimaalse võimaliku punktide arvu leidmiseks, mida üks kaalurida saab anda, kui tegur on väiksem ühest.

Näiteks sellise reegli puhul (esimese rea -1000 on w ja 0 on x)

:0 B
* -1000^0
*   100^1     N|normaalne
*   600^0.75  I|ilus
*  1000^0.5   V|vapustav
*  -800^2     P|paha
HeadUudised

saab selline kiri

Tere Priit, 

Kas pingviini ikka läheb? Meil on siin Rica's
suht normaalne ilm. Ilus isegi.
Jõuan koormaga piirile täna õhtul, ilus?
Vapustavalt hästi on läinud seni.

Mart

punkte selliselt Algul saab kätte esimese rea eest 1 000, kuna tühi regulaaravaldis klapib kõigega. Kuna tegur on 0, siis see rida rohkem punkte skoori ei lisa. Iga "normaalne" annab 100 punkti. Esimene "ilus" lisab skoori 600 punkti, teine 600 x 0.75, kolmas lisaks 600 x 0.75 x 0.75 jne. Siiski, see rida ei saa lisada üle 2 400 punkti. Meie puhul lisab ta 1 000 punkti. "vapustav" lisab 1 000 punkti. "paha" ei lisa midagi.

Kiri salvestatakse faili HeadUudised, kuna ta sai punkte kokku 1 100.

skoor = -1000 + 100 + 600 + 600 * 0.75 + 1000 = 1100