Procmail
Procmail je program
koji automatski procesira pristiglu elektroničku poštu (u nastavku e-mail)
ovisno o njenom sadržaju. Pod pojmom procesira podrazumijeva se različita
obrada podataka pristiglih u zaglavlju e-maila, te potom obavljanja određene
aktivnosti nad tijelom e-maila kao npr. pohranjivanje pristiglih e-mail-ova u
različite direktorije ovisno o sadržaju podataka u pojedinim dijelovima
zaglavlja (npr. subject), proslijeđivanje e-mail-ova na razne druge
adrese, odgovaranje pošiljaocu na određene njegove zahtjeve itd. U
slučaju da je jedna od aktivnosti slanje e-maila tada je uz program procmail
potreban i program sendmail koji omogućava slanje e-maila. Na
većini računala već postoji neki e-mail transfer agent.
Važno je da oba programa budu iz istog programskog paketa (u našem slučaju
to je debian programski paket, a korišteni programi su
procmail_3.13.1-1.deb i sendmail_8.9.3-3.deb). Kod instaliranja sendmaila i
procmaila prvo je potrebno instalirati m4_1.4-9.deb, potom sendmail_8.9.3-3.deb,
te na kraju procmail_3.13.1-1.deb. Na kraju instalacije podignuti sendmail kao
daemon program koji osluškuje port 25.
Koje od navedenih aktivnosti će se obavljati određujemo mi
pisanjem odgovarajućih procmail skripti (procmail recipes).
Procmail skripte pišu se u skladu s procmail sintaksom, ali postoji već
čitav niz gotovih skripti koje obavljaju neke osnovne aktivnosti potrebne
većini korisnika, te nije potrebno ulaziti dublje u analizu procmail
sintakse. Kada se odlučimo koje aktivnosti želimo da naša procmail skrita
obavlja jednostavno potražimo na Web stranicama koje opisuju rad procmaila
gotove odgovarajuće skripte ili ih sami napišemo, te ih uključimo u
glavni procmail program koji sadrži njihove pozive. U našem slučaju glavni
procmail program izgleda ovako:
VERBOSE = no # (ovo je oznaka komentara) stavi yes ako radis
debugiranje
## LOGABSTRACT
= all # oznaka ## znaci neukljuceno, koristi se kod debugiranja
MAILDIR =
$HOME/mail # kreiranje mail direktorija, tu se nalaze svi
mailovi koji se šalju s pine (potrebno ga je kreirati ako ga nema). Po defaultu
se svi mail-ovi preusmjeravaju i nalaze u datoteci /var/spool/mail/student
PMDIR =
$HOME/Procmail # kreiranje Procmail direktorija u kojem se moraju
nalaziti sve procmail skripte (potrebno ga je kreirati ako ga nema)
LOGFILE =
$PMDIR/log # kreiranje log datoteke unutar Procmail direktorija
čiji se sadržaj automatski generira, a u kojoj će detaljnije biti
opisano što se s pristiglim mailom sve radi
INCLUDERC = $PMDIR/testing.rc # poziv procmail skripte koja služi za elementarno testiranje procmaila
INCLUDERC =
$PMDIR/adp.rc # poziv procmail
skripte koja obrađuje zahtjev korisnika vezanih za AD pretvorbu
Glavni procmail program potrebno je napisati u jednom od tekstualnih
editora (u Linux-u je to npr. joe editor) i spremiti ga u home
direktorij pod imenom .procmailrc (rc na kraju imena dolazi od recipe).
Skraćeno, na komandnu liniju potrebno je napisati:
cd /*
odlazak u home direktorij */
joe
.procmailrc /* otvaranje joe tekstualnog editora */
Kao što se vidi iz glavnog programa
sve korištene skripte moraju se nalaziti u Procmail direktoriju. Tako se
u našem slučaju nalaze testing.rc i adp.rc skripte. Testing.rc
skripta svaki e-mail koji u subjectu sadrži riječ test sprema u
datoteku in-testing koja će se nalaziti u mail direktoriju,
te sadrži slijedeće:
:0:
*
^Subject:.*test
in-testing
Adp.rc skripta obrađuje zahtjev korisnika za određenim brojem uzoraka
mjernog signala s određenog kanala, te željene rezolucije. Navedeni
zahtjev nalazi se u subjectu e-maila, adrese student@linlab10.zesoi.fer.hr ,
i oblika je adp broj_kanala broj_uzoraka rezolucija. Podatci koji
se zadaju u subjectu su broj_kanala (broj od 1 do 8), broj_uzoraka (broj od 1
do 1000 i zadaje se u obliku npr. 0324), te rezolucija (zadaje se u obliku l -
low, m - middle ili h - high). Npr. subject bi mogao izgledati ovako adp 4
0056 m. Adp.rc skripta sadrži slijedeće:
SUBJECT =
'formail –xSubject:' #
konstruktor varijable okoline SUBJECT kojoj pridružuje vrijednost subject-a
:0
* ! ^From
+YOUR_USERNAME #
sprečavanje nastajanja mail petlje
* !
^Subject:.*Re: #
sprečavanje nastajanja mail petlje
* !
^FROM_DAEMON # sprečavanje nastajanja mail petlje
????? # poziv C programa za parsiranje
subjecta
*
^Subject:.*adp # testiranje da li subject sadrži
riječ adp
˝(formail –r ; cat rezultat) ˝ $SENDMAIL –oi –t #
slanje dotičnom korisniku datoteke rezultat.txt kao odgovor na njegov zahtjev
Prethodno je u konfiguracijskoj
datoteci /etc/mail/sendmail.mf potrebno dodati slijedeći red:
MAILER(procmail)dnl
Slijedeći C program parsira subject dospijelog e-maila, tj. izdvaja
redni broj kanala s kojeg će se uzimati uzorci, zatim broj uzoraka koji
će se uzeti, te rezoluciju s kojom će se uzimati. Subject se ovdje
pojavljuje kao varijabla okoline (SUBJECT) jer se tako definira u procmail
skripti koja obrađuje pristigle e-mail-ove. Dobiveni podaci iz subject-a
proslijeđuju se programu klijent koji kao rezultat vraća
traženi broj uzoraka navedene rezolucije s navedenog kanala. Ti uzorci zapisuju
se u datoteku rezultat.txt, koja se kao tijelo e-maila šalje kao odgovor
na zahtjev pošiljatelja.
# include<stdio.h>
#
include<stdlib.h>
main( )
{
int br_k,
br_u, i;
char rez,
brkanala, *SUBJECT;
char
bruzoraka[4];
/*
učitavanje ulaznog niza (zahtjeva) iz varijable okoline SUBJECT */
SUBJECT =
getenv( ˝SUBJECT˝ );
/* parsiranje
subject-a */
brkanala =
SUBJECT[4];
br_k = ( int
)brkanala;
rez =
SUBJECT[11];
for( i=0;
i<4; i++ )
bruzoraka[i] =
SUBJECT[i+6];
bruzoraka[4] =
' \0 ';
br_u = atoi(
bruzoraka );
/*
proslijeđivanje parametara programu klijent i ispis uzoraka u datoteku
rezultat */
system( ˝/home/student/klijent
br_k br_u rez > /home/Procmail/rezultat.txt˝ );
}
KOMENTAR: Meni
nije uspio proraditi dio skripte koji šalje određenu datoteku pošiljaocu,
te nisam uspio pronaći kako izgleda poziv C programa u procmail skripti.
To neka ostane neriješen problem za slijedeću generaciju!!
LITERATURA:
http://www.procmail.org/jari/ => pm-tips
7.7
Quoting: Passing values to an external program
7.8 Passing values from an external program
8.9 Make your own .procmailrc available to others
12.6 Complaining about html messages
http://userpages.umbc.edu/~ian/procmail.html
http://www.ii.com/internet/robots/procmail/
http://www.ii.com/internet/robots/procmail/qs/
http://consult.cern.ch/service/mail/utils/filtering/doc/procmailex.html
http://fsinfo.cs.uni-sb.de/~abe/man/procmailex.html