Procmail

Ponekad možemo naići na podatke o broju poslanih e-mailova u jedinici vremena u čitavom svijetu. Iako ne postoji precizna metoda po kojoj bi to netko izračunao, jasno je da su brojke ogromne. Lakše nam je tako pojmiti s koliko se poruka dnevno mora obračunati prosječan mrežno aktivniji korisnik. Čak i ako iz računice izbacimo spam, ostaje nam velika količina različito važnih poruka. Kako je danas vrijeme najskuplje, dobro će nam doći način automatizacije postupka sortiranja i brisanja mailova. U tu svrhu iskoristit ćemo program imena procmail. On može sortirati dolazni mail u mape (praktično kod mailing listi), pokretati programe po primitku maila (zvučna obavijest) ili prosljeđivati ih na drugu adresu. Kriteriji mogu biti bilo koje polje zaglavlja (pošiljatelj, naslov, ključne riječi), duljina poruke, prisutnost privitaka ili sam tekst poruke. To nam može poslužiti i za elementarnu borbu protiv spama, no kako spammeri sve više evoluiraju, to je sve teže. Za to se onda koriste dodatni programi (Spamassassin, dspam).

Instalacija

Procmail je namijenjen za Linux/UNIX mail servere. Samim tim moramo ga koristiti upravo tamo, prije nego što pokupimo mail na lokalno računalo. Potrebno je samo prebaciti datoteku imena .procmail (točka na početku je nužna) u naš udaljeni početni direktorij i sustav će ju automatski početi koristiti (u najvećem broju slučajeva). Ako ipak neće, možemo još pokušati urediti datoteku .forward sa sadržajem "|exec /usr/bin/procmail", no najbolje da kontaktiramo administratora. Ako stavljamo poruke u posebne mape, morat ćemo e-mail skidati IMAP protokolom.
Koristimo li Linux na lokalnom računalu, možemo fetchmailu (programu koji skida poštu preko POP3 ili IMAP-a) zadati opciju "--mda procmail" kako bi ju prije isporuke propustio kroz procmail.

Procmailrc

Za cijelu konfiguraciju dovoljna je samo jedna datoteka u koju ćemo stavljati pravila i sve podatke koji trebaju za normalan rad. Tako ćemo pri samom vrhu datoteke definirati neke varijable. "SHELL=/bin/bash" potrebna je ako planiramo pokretati neke programe kao akciju na dobivenu poruku. "MAILDIR=$HOME/mail" označava direktorij gdje će se stavljati sortirane mape. LOGFILE=$HOME/procmail.log jako je bitan, jer ćemo pregledavajući ga pratiti što se događa. Kako ćemo s vremenom sve više povećavati našu bazu, bit će sve teže snalaziti se u jednoj datoteci. Naredbama "INCLUDERC=datoteka" možemo dodati sadržaj dodatnih popisa, primjerice tematski grupiranih.
No, ono što ustvari čini tu datoteku skup je pravila koji rade sav posao. Svako se pravilo sastoji iz tri dijela. Prvi započinje s ":0" iza čega slijede zastavice, koje mijenjaju način na koji se poruke tretiraju (c - stvaranje kopije, B tj. H - pregled tijela poruke tj. zaglavlja, D - neosjetljivost na mala i velika slova). Primjerice ":0c" može poruku proslijediti negdje drugdje, ali će zadržati original za daljnju obradu.

Drugi dio započinje zvjezdicom, a definira kriterije koje poruke mogu zadovoljavati (adresa pošiljatelja itd.). Oni se definiraju tzv. regularnim izrazima (regexp), složenim pravilima čiji bi imalo detaljniji opis zauzeo previše mjesta. Više o njima u okviru. Nama je najbitnije znati da ".*" označava bilo koji znakovni niz bilo koje duljine (pa i nula). Najjednostavniji primjer bio bi "* ^From:.*@spammer" koji označava mail s domene spammer. Još neka od nama zanimljivih polja mogu biti To, Subject, Cc, Content-Type (definira tip poruke, čudne kodne tablice ili attachmenti). Kriteriji se mogu navoditi jedan ispod drugog, i onda su povezani logičkim operatorom I, dakle svi moraju biti zadovoljeni. Negaciju dobivamo navođenjem uskličnika na početku pravila (ali iza zvjezdice). Logički ILI uvjet možemo dobiti navođenjem pravila i umetanjem "1^0" ispred, ili pak konstrukcijom: ".*(enlargement|v1agra|credit)". Zadamo li kriterij u obliku "* ? egrep -is -f black.txt", u toj datoteci dovoljno je da navodimo mail adrese ili domene jednu ispod druge i bit će obuhvaćene. Često je potrebno sortirati poruke po veličini, a za to će nam poslužiti sintaksa "* < 64000" (manje od 64 kB).
Posljednji dio procedura je koja se izvršava nad mailom koji je zadovoljio gornje kriterije. Razlikujemo tako slanje u posebnu mapu (dovoljno je samo navesti njeno ime), preusmjeravanje na alternativnu - jednu ili više njih - e-mail adresu (uskličnik ispred: "! email@negdje") ili slanje vanjskom programu (uspravna crta - pipe ispred imena programa: "| /usr/bin/program"). Ako se kao odredište navede /dev/null, mail se briše. Želimo li neki mail odmah izdvojiti kao bitan, njegovo pravilo navest ćemo što bliže vrhu, a odredište ćemo specificirati kao "$DEFAULT" što će ga staviti u naš Inbox.
Nažalost, ovdje je obrađen tek manji dio svih mogućnosti, no i s njima zajedno s pametnom strategijom moguće je vrlo dobro organizirati vlastitu elektroničku poštu.

Regularni izrazi

Regularni se izrazi osim u procmailu koriste i u brojnim drugim Linux programima (grep, vi, sed, perl...). Pravila isprva djeluju zbunjujuće no ima ih tek mali broj, pa se lako shvati što koje znači.

^A slovo A na početku retka
Z$ Z na kraju retka
. (točka) bilo koji znak
prvi|drugi jedan od ova dva stringa
[aeiou] točno jedan samoglasnik
[^0-9] bilo koji znak koji nije znamenka
\$ specijalni znak tumači se kao običan
A* string od nula ili više znakova A
chip* chi, chip, chipp...
A+ jedan ili više znakova A
A? nula ili jedan znak A
80[234]?86 8086,80286,80386,80486
.* bilo koji znak proizvoljno puta