Alapesetben a procmail a .forward levélátirányításkor lép működésbe. Ettől eltérően, ha a rendszer üzemeltetője beállította, a levelezőprogrammal együtt is használható. Indításkor mindig az alapértékekkel tölt fel bizonyos környezeti változókat, a szabványos bemenetről olvassa be sorvége jelig a levelet, majd a fejléc alapján, ha nincs megadva semmilyen parancssori kapcsoló, akkor a $HOME/.procmailrc -ben található szűrést végzi el, ha szükséges. Ha nem található ilyen konfigurációs állomány, vagy feldolgozáskor hiba merül fel, akkor a levelet az alapértelmezett postafiókba (mailbox) továbbítja.
Konfigurációs állomány (rcfile) és -p parancssori kapcsoló hiányában a procmail először a /etc/procmailrc állományt dolgozza fel (ha van ilyen). Az /etc/procmailrc állomány létrehozásakor figyelni kell arra, hogy a benne megadott műveletek root jogosultsággal hajtódnak végre, szemben a $HOME/.procmailrc -ben megadottakkal.
Suid root vagy root jogokkal egy komplett levéltovábbító programként lehet használni a procmailt.
Procmailt a levelek általános szűrésére is lehet használni, pl. a sendmailben speciális bejegyzéssel lehet futtatni.
A konfigurációs állomány felépítéséről részletesen a procmailrc (5) súgóban lehet olvasni.
A súlyozott pontozási módszerről a procmailsc (5) súgó ad bővebb felvilágosítást.
Néhány konfigurációs példát pedig a procmailex (5) súgóban lehet megtalálni.
Minden más értéket konfigfájl megadásának minősít, legyen az abszolút vagy relatív útvonal hivatkozás (pl. ./) A relatív útvonalak esetén a kiindulási könyvtárnak a $HOME-ot veszi, hacsak nem az -m kapcsolót nem használtuk. Ebben az esetben az aktuális könyvtár a relatív hivatkozás kiindulási pontja. A procmail mindig az első megadott értékkel próbál meg dolgozni, de ha az nem ad meg alkalmas állománybejegyzést, akkor sorra veszi a többi értéket is, amíg szükséges.
Konfigurációs fájl megadása nélkül a $HOME/.procmailrc állományt próbálja megnyitni. Ha ez nem lehetséges, akkor a környezeti változók és a parancssorban megadott értékek szerint fog futni.
A következőkben a rendszer adminisztrátorok és a sendmail.cf szerkesztésében járatosak számára következnek hasznos tanácsok, akit nem érdekel az nyugodtan átugorhatja ezt a részt.
Az -m kapcsolót leginkább akkor használhatjuk, ha a procmailt a sendmail.cf állomány egyik beállításaként hívjuk meg. Ehhez szükséges a sendmail.cf fájlban egy külön procmail-levélküldő részt megadni (hasonlót, mint a valószínűleg már létező `helyi' levélküldőhöz (local mailer)). Ehhez a következőt célszerű a fájlban elhelyezni.
2 Mprocmail, P=/usr/bin/procmail, F=mSDFMhun, S=11, R=21, A=procmail -m $h $g $u
Ezzel lehetséges különböző szűrési módokat elvégezni (hasonlókat, mint a 0-val kezdődően beállítottakkal) a procmail-el (a feltételben megadott tabulátorok fontosak, mind a feltétel előtt, mind a megjegyzések előtt):
4 R$*<@some.where>$* $#procmail $@/etc/procmailrcs/valami.rc $:$1@vala.hol.procmail$2 R$*<@$*.procmail>$* $1<@$2>$3 szűrt levelek továbbengedése
Az /etc/procmailrcs/valami.rc tartalma pedig:
6 :0 # levélszemét (junk mail) szűrése * ^Subject:.*junk /dev/null
:0 # többi levél továbbengedése ! -oi -f "$@"
Vigyázzunk arra, hogy csak olyan levelet küldjünk el, amely az elsőként megadott feltételnek felel meg, mert különben a levél nem jutna el a címzetthez.
Ha valamilyen okból a procmail programot idő előtt be szeretnénk zárni, akkor először a kill parancsot (de nem a 'kill -9'-et, az eltérő értékű JELZÉS miatt) használjuk, különben néhány záróállomány nem kerül törlésre.
Óvatosan használjuk a -t kapcsolót, mivel ebben az esetben a procmail hamar megtöltheti a postafiókot továbbküldési hiba (pl. rosszul beállított, hibás konfigurációs állomány) esetén. Ez gondot okozhat mind a postmaster-nél és a helyi felhasználóknál.
Az /etc/procmailrc állomány root jogokkal is futhat, így jól gondoljuk meg, hogy mit helyezünk el benne, mit hajtatunk végre vele. A SHELL a címzettével azonos, így ha szükséges a burok elindítása, akkor a hibalehetőségek csökkentéséért először valamilyen jól működő értékre állítsuk be azt. Lásd 'u' : DROPPRIVS kapcsolók.
Ügyeljünk arra, hogy az /etc/procmailrcs/ állományok tulajdonosát meg lehet változtatni chown (1) -val root-ra vagy bármi másra. Biztonsági szempontból ezért célszerű, hogy ebbe a könyvtárba csak a root tudjon belépni
A procmail nem a legjobb eszköz egy postafiók több felhasználó közötti megosztására, mint ahogy több felhasználót kiszolgáló egy darab POP3 -as levelesládák esetében néha előfordul. Az MTA beállításával egyéni fejlécekkel lehet ellátni a leveleket, amelyek segítségével a címzett később egyértelműen azonosítható, de ezt csak átmeneti megoldásként használjuk. Célszerűbb inkább az MTA-ban `virtuális felhasználó adattáblát' (`virtual user table') beállítani, vagy a Fetchmail `multidrop' képességét kihasználni.
A procmail hagyományos BEZÁR (TERMINATE) jelzéssel szakítja meg a nem-megfelelően működő szűrőket, azonban nem figyeli azok válaszát a jelzésre, és mindössze a szűrőnek küldi a jelzést el, a gyerek-folyamatoknak (filter's children).
A folytatott Content-Length: mezőket nem kezeli megfelelően a procmail.
A folytatott fejlécbe beszúrt újsorokat átlépi ahelyett, hogy egy egyszerű szóköznek tekintené.
Ha hiányzik a Content-Length: mező és az -Y kapcsoló meg lett adva, valamint a procmail a hagyományos postafiókba továbbítja a levelet, akkor a levél törzsében a postmarks-hoz hasonló sorok elé egy `>' jelet szúr be (a furcsa fejlécek megkülönböztetéséhez). Az ajánlott forma az ilyen postmark-ok kereséséhez az alábbi:
Ha közvetlen továbbításánál a címzett neve nem található az /etc/passwd állományban, akkor a procmail közvetett módon továbbítja a leveleket. Ha nem közvetlen módon és ismeretlen (az /etc/passwd -ban nem létező) uid alatt próbál meg a procmail futni, akkor a HOME alapesetben a / lesz, a LOGNAME pedig #uid értéket veszi fel, a SHELL pedig /bin/sh lesz.
Közvetlen továbbításánál a hiányzó `From ' mezőt a procmail automatikusan létrehozza, ha már létezik, akkor azt nem változtatja meg. Ha a procmail nem a következő felhasználói vagy csoport nevek valamelyikével fut: root, daemon, uucp, mail, x400, network, list, slist, lists vagy news, és meg lett adva a `From ' mező újragenerálása akkor az `>From' -ként lesz létrehozva, ezzel segítve a levelek megkülönböztetését.
Biztonsági megfontolásokból a procmail csak abszolútan vagy a HOME-hoz viszonyított relatívan, root vagy a címzett tulajdonában lévő konfigurációs állományokkal működik. A fájl és/vagy az azt tartalmazó könyvtár nem lehet mindenki által írható. A $HOME/.procmailrc esetén fontos még, hogy az állomány vagy könyvtára nem lehet a csoport számára sem írható.
Ha különböző hibák fordulnak elő a /var/spool/mail/$LOGNAME postafióknál (pl. nem a címzett annak a tulajdonosa, nem írható, szimbólikus vagy kemény kötés) ,akkor a procmail hozzáféréskor megpróbálja `BOGUS.$LOGNAME'-re azt átnevezni, és külön node-számmal ellátni. Ha ez nem lehetséges, akkor az ORGMAIL változó nem kap megfelelő értéket, ezáltal még megfelelő konfigurációs állomány esetén sem történik levélfeldolgozás.
Létező, de hibás jogosultságokkal rendelkező /var/spool/mail/$LOGNAME postafiók esetén a procmail megpróbálja a hibát kijavítani. Ha nem szeretnénk, hogy a procmail kijavítsa az ilyen hibát, akkor u+x jelzést kell az állományra helyezni.
Könyvtárakba, MH-fiókokba vagy levélmappákba történő levélátirányításhoz nem szükséges az esetlegesen párhuzamosan futó procmail programoknak a várt/megfelelő működésük érdekében záróállományt megadni.
MH-fiókba kicsit lassabban történik , mint egy sima könyvtárba vagy levélmappába a levéltovábbítás. A procmailnak ekkor meg kell keresni a legnagyobb sorszámú levelet a fiókban (a többi esetben nem kell ilyet elvégezni).
Általános hibát a procmail az EX_CANTCREAT -el jelzi, kivéve ha a -t kapcsoló meg lett adva. Ebben az esetben EX_TEMPFAIL -el történik a hibajelzés.
A fejlécek pontosabb kereséséhez (egrepping) a procmail összefűzi azokat a levélen belül. Továbbításkor azonban a fejléceket visszaállítja eredeti állapotukba.
Ha a procmailt nem `procmail'-el kezdődő programnév alatt indítjuk el (pl. egy másiknévvel hivatkozunk rá kötéssel), akkor közvetlen módban fog működni. Ekkor/ehhez viszont a parancssorban a címzetteket fel kell sorolni (úgy mint a -d kapcsoló esetén).
udp-vel történik a comsat/biff értesítés. A naplóállomány (logfile) lezárása után értesíti a programokat az új levélről a procmail. Az értesítés az alábbi részletes formátumban (vagy valami hasonlóban) történik:
Procmail minden állományba történő levéltovábbításkor a következő kernel- zárolási metódust használja: fcntl (2).
A procmail képes NFS-en és 8-bittel működni.
.nE 11
Kezdőknek a Nancy McGough <nancym@ii.com> által összeállított levélszűrőkről (így a procmailről is) szóló GYIK-ot (FAQ) ajánljuk. Beszerezhető a mail-server@rtfm.mit.edu címre küldött
Nem csak a levelek érkezésekor a rendszeren beállított módon lehet a procmailt futtatni, hanem a felhasználó egyedi igényei alapján is. Ehhez a $HOME/.forward állományban kell elhelyezni a lentebb látható sort. Ügyeljünk arra, hogy ugyanúgy vigyük be a sort a fájlba (aminek mindenki számára olvashatónak kell lennie). A procmail helyét abszolút útvonallal adjuk meg. A #YOUR_USERNAME valójában nem szükséges a procmail működéséhez, a burok nem is adja át ezt az értéket a procmail-nak, azonban a biztonság kedvéért a sendmail számára van ez megadva.
" 'u' |exec /usr/bin/procmail"
A procmailt egy már létező postafiók szűrésére is fel lehet használni. Ez akkor lehet hasznos, ha a $HOME/.forward -ot nem lehet/nem tudjuk használni (ekkor a következő szkriptet célszerű bizonyos időközönként elindítatni a cron (1) -al vagy a levelek olvasásának megkezdése előtt): 17 #!/bin/sh
ORGMAIL=/var/spool/mail/$LOGNAME
if cd $HOME && test -s $ORGMAIL && lockfile -r0 -l1024 .newmail.lock 2>/dev/null then trap "rm -f .newmail.lock" 1 2 3 13 15 umask 077 lockfile -l1024 -ml cat $ORGMAIL >>.newmail && cat /dev/null >$ORGMAIL lockfile -mu formail -s procmail <.newmail && rm -f .newmail rm -f .newmail.lock fi exit 0 .nE 14
PATH=/bin:/usr/bin:/usr/bin MAILDIR=$HOME/Mail #ellenőrizzük, hogy létezik-e DEFAULT=$MAILDIR/mbox #nem kötelező megadni LOGFILE=$MAILDIR/from #ajánlott megadni:0: * ^From.*miki from_miki
:0 * ^Subject:.*Flame /dev/null
A procmailex (5) súgóban további példák találhatók.