Rechercher une page de manuel

Chercher une autre page de manuel:

procmailex

Autres langues

Langue: hu

Autres versions - même langue

Version: \*(Dt (ubuntu - 01/11/07)

Section: 5 (Format de fichier)


NÉV

procmailex - procmail konfigurációs állomány példák

ÁTTEKINTÉS

$HOME/.procmailrc példák

LEÍRÁS

A konfigurációs állomány felépítésérõl bõvebben a procmailrc(5). súgóban lehet olvasni.

A súlyozott értékelési módszerrõl részletes információ a procmailsc(5) súgóban található.

Ebben a súgóban néhány mintapéldát lehet találni. Részletesebb konfigurációs példákat a procmail(1), súgó MEGJEGYZÉS részében, vagy a procmail csomagban (procmail*/examples/?procmailrc) lehet találni.

PÉLDÁK

Búvárkodással foglalkozó levelezõ listáról érkezõ leveleket a buvarkodas nevû mappába irányításhoz (buvarkodas.lock záróállomány [locallockfile] használatával) a következõ megoldás használható:
 
:0: * ^TObuvarkodas buvarkodas

 

Pétertõl érkezõ programozásról szóló leveleket Istvánnak az alábbi módon lehet továbbítani, miközben ezekrõl a levelekrõl egy másolat a peterprog mappába kerül.

 
:0 * ^From.*peter * ^Subject:.*programozas { :0 c ! istvan@gepe.hu :0 peterprog }

 

Ugyanez egy kicsit másként:

 
:0 c * ^From.*peter * ^Subject:.*programozas ! istvan@gepe.hu :0 A peterprog

 

Ugyanez, de egy kicsit lassabb módszerrel:

 
:0 c * ^From.*peter * ^Subject:.*programozas ! istvan@gepe.hu :0 * ^From.*peter * ^Subject:.*programozás peterprog

 

Procmailben kevésbé járatosak és kísérletezgetõknek jól jöhet néhány tanács. A következõ két feltételt a szûrõfeltételek elé beszúrva az utolsó 32 levelünkrõl mindig készül egy biztonsági másolat. Ahhoz, hogy mûködjön ez a mentés, el ne felejtsük a $MAILDIR könyvtárban létrehozni egy 'mentes' könyvtárat.

 
:0 c mentes :0 ic | cd mentes && rm -f dummy `ls -t msg.* | sed -e 1,32d`

 

A levelekben a `From ' mezõ nem mindig megfelelõ, ezt egy procmail -f paranccsal lehet kijavítani. Az ilyen típusú hibák javításához az alábbi két feltételt érdemes beszúrni. Ezekkel az összes bejövõ levél fejlécében javíthatjuk a `From ' mezõt.

 
:0 fhw | formail -I "From " -a "From "

 

Másik hasznos dolog lehet, ha egy saját fejlécet szúrunk be (statisztikai vagy egyéb indok miatt) az összes olyan levélbe, amely nem a postmaster-tõl jött (itt fejlec.lock záróállományt is használunk). Annak érdekében, hogy a záróállomány a szûrés befejezésig aktív maradjon a `w' kapcsolót is meg kell adni, különben ahogy a szûrési feltételhez ér a levél a zárolás megszûnne.

 
:0 hwc: * !^FROM_MAILER | uncompress fejlec.Z; cat >>fejlec; compress fejlec

 

Vagy a hatékonyabb gzip-es tömörítõvel az alábbi módon:

 
:0 hwc: * !^FROM_MAILER | gzip >>fejlec.gz

 

Az összes 1000 bájtnál kisebb levelek otthoni címünkre irányításához (záróállomány használata nélkül) az alábbira lehet szükségünk:

 
:0 * < 1000 ! nevem@otthon

 

A szörfölés levelezési listáról érkezõ digest (összefûzött) levelek szétdarabolásához és azok szorfoles mappába irányításához, szorfoles.lock záróállomány használatával a következõ szûrõre van szükségünk.

 
:0: * ^Subject:.*szorfing.*Digest | formail +1 -ds >>szorfoles

 

A postmastertõl vagy a mailer-daemontól érkezõ összes levél postm mappába gyûjtéséhez, postm.lock
 záróállomány használatával az alábbi szükséges:

 
:0: * ^FROM_MAILER postm

 

Egy egyszerû megoldás automatikus válaszadásra. A saját és a levéltovábbító programoktól érkezõ levelekre automatikus válaszadásnak nem szabad történnie. Ha nem figyelnénk erre, akkor galibába kerülhetünk (pl. körkörös levéltovábbküldés [`ringing' mail]). Hogy hatékonyan mûködjön ez a szûrõ, ezért az összes többi elé célszerû beszúrni. Azonban ajánlatos lehet, a levelezõlistákról érkezõ levelek szûrése után betenni, mivel levelezõlisták leveleire automatikus választ küldeni nem ildomos. Elméletileg a !^FROM_DAEMON feltétel kiszûri a levelezõlistákat, de ne kísértsük a sorsot , ha mégsem tenné azt.

 
:0 h c * !^FROM_DAEMON * !^X-Loop: sajat@emilcimed | (formail -r -I"Precedence: junk" \ -A"X-Loop: sajat@emilcimed" ; \ echo "Leveled érkezett.") | $SENDMAIL -t

 

A vacation(1) programot akár helyettesítõ, összetettebb automatikus válaszadást a következõ módon lehet létrehozni. Ez a szûrõ az elõzõekben ismertetet módszert azzal egészíti ki, hogy egy szünidõ adatbázist készít a szunido.cache állományba a levelek feladóiból; ha azok ott még nem szerepeltek, akkor felveszi azokat az állományba. (A szunido.cache állományt a formail hozza létre ügyelve arra, hogy mindig a legfrissebb feladók neveit rátolja maximum 8192 bájt méretben.) Ha a feladó még nem szerepelt az adatbázisban, akkor automatikusan választ kap.

Ahogy látható a szûrési feltételek sorában megjegyzések is elhelyezhetõk Az onban soha se tegyünk megjegyzést az összehasonlítást végzõ sorokba.

 
SHELL=/bin/sh # shelltõl függõen adjuk meg :0 Whc: szunido.lock # Ellenõrizzük, hogy a levél nekünk lett-e címezve * $^To:.*\<$\LOGNAME\> # Levelezõlistákra és felügyelõ programoknak nem küldünk választ * !^FROM_DAEMON # Körkörös levélküldés megakadályozása * !^X-Loop: sajat@emailcimed | formail -rD 8192 szunido.cache :0 ehc # ha a feladó még nem szerepelt az adatbázisban | (formail -rI"Precedence: junk" \ -A"X-Loop: sajat@emailcimed" ; \ echo "Megkaptam az üzenetedet,"; \ echo "de csak HÉTFÕN vagyok legközelebb."; \ echo "-- "; cat $HOME/.signature \ ) | $SENDMAIL -oi -t

 

TeX-el foglalkozó levelek texmail könyvtárban (a könyvtárat külön létre kell hozni) tárolásához egyedi állománynevekkel a következõképen oldható meg:

 
:0 * (^TO|^Subject:.*)TeX[^t] texmail

 

Ugyanezt, de nem egyedi, hanem számozott névvel (MH mappa) elmentett levelekhez ezt kell használni:

 
:0 * (^TO|^Subject:.*)TeX[^t] texmail/.

 

Mindezek mellett egyszerre több helyre is lehet irányítani a leveleket. A következõkben két MH mappába és egy könyvtárba kerül a levél és másolatai. Ez majdnem olyan mintha egy állományba mentenénk, de a másikkal "keménykötéssel" (hardlink) összekapcsolnánk.

 
:0 * (^TO|^Subject:.*)TeX[^t] texmail/. szovegszerkesztes dtp/.

 

Az összes megbeszélésrõl szóló levelet egy olyan mappába irányíthatjuk, amely mondjuk havonta változik a következõ megoldással. Pl. 1994. januárban a könyvtár neve 94-01 lenne, a levelek pedig a 94-01/megbeszeles mappába kerülnének, a záróállomány neve pedig `94-01/megbeszeles.lock' lenne.

 
:0: * megbeszeles `date +%y-%m`/megbeszeles

 

Mint fenn, de ha még nem létezne a `94-01' könyvtár, akkor automatikusan létre lesz hozva.

 
MONTHFOLDER=`date +%y-%m` :0 Wic * ? test ! -d $MONTHFOLDER | mkdir $MONTHFOLDER :0: * megbeszeles ${MONTHFOLDER}/megbeszeles

 

Egy kicsit másként kivitelezve ugyanaz:

 
MONTHFOLDER=`date +%y-%m` DUMMY=`test -d $MONTHFOLDER || mkdir $MONTHFOLDER` :0: * megbeszeles ${MONTHFOLDER}/megbeszeles

 

Azok, akik több levelezõlista tagjai és ahol a tagok üzeneteiket több helyre is elküldik, sokszor szeretnének ezektõl a duplikált levelektõl megszabadulni automatikusan. A következõ szûrõvel ezeket az ismétlõdõ leveleket lehet kitöröltetni. A trükk, hogy egy 8 KB-os állományban tároljuk a legfrissebb levelek Message-ID-it (levélazonosítóit). Mivel a Message-ID-k egyediek , ezért ezek alapján könnyû megkeresni az ismétlõdõ leveleket. Hogy egyetlen ismétlõdõ levél se jusson át a szûrésen, érdemes a konfigurációs állomány legelejére tenni azt.

 
:0 Wh: msgid.lock | formail -D 8192 msgid.cache

 

Azonban levéltovábbítási hibák esetén ezzel a szûrõvel törlõdhetnek olyan levelek, amelyeket nem akartunk töröltetni, mivel a procmail újra megpróbálja továbbítani a levelet a hiba esetén, azonban a Message-ID-k alapján ekkor már duplikált leveleknek fogja tekinteni a leveleket, s törli azokat. Így azok, akik még nem biztosak magukban a következõ szûrõt használják. Ez a szûrõ a duplikált leveleket nem törli, hanem egy külön mappába helyezi. Természetesen ezt a mappát idõnként majd üríteni szükséges.

 
:0 Whc: msgid.lock | formail -D 8192 msgid.cache :0 a: duplikaltak

 

Procmail-lel MH mappákba közvetlenül lehet levelet irányítani, azonban a mappa bejegyzéseit nem tudja megfelelõen módosítani. Ha ezt is szeretnénk elérni, akkor a következõ szûrõre van szükségünk, amely minden spam tartalmú levelet egy spamfold MH mappába helyez át. A záróállománynak itt kiemelt jelentõsége van, mivel az MH programok mûködésük közben nem zárolják a feldolgozandó állományt. MH programok egymástól független futtatása ugyanazon az állományon ezért adatsérülést, vagy akár adatvesztést okozhatnak. Sajnos a záróállomány használata nem old meg minden problémát, mivel az rcvstore programot a `show', `mark' vagy egyéb MH program futása közben is el lehet indítani. Ezt a problémát az MH elkövetkezõ verziójában ki fogják küszöbölni, addig viszont együtt kell élni azzal, hogy adatsérülést vagy adatvesztést okozhat mappák bejegyzéseinek ilyen irányú módosítása.

 
:0 :spamfold/$LOCKEXT * B ?? spam | rcvstore +spamfold

 

Emacs mappák használata (pl. emacs-on alapuló levelezõprogramok -- RMAIL, VM, stb. -- levélmappái) esetén ügyelni kell arra, hogy emacs kompatíbilis záróállományt hozzunk létre. Az emacs-os programok érzékenyek arra, ha nem megfelelõek a záróállományok. Legyen a $HOME pl. /home/jani , ekkor a következõ szûrõt érdemes használunk:

 
MAILDIR=Mail :0:/usr/local/lib/emacs/lock/!home!jani!Mail!mailbox * ^Subject:.*valami mailbox

 

Emellett azt is meg lehet tenni, hogy a procmail-lel egy külön levélmappába válogatjuk a leveleket és idõközönként a movemail programmal másoltatjuk a megfelelõ emacs állományba. A movemail minden egyes levélmappán záróállományt helyez el, mint a procmail mûködése közben.

Levél bizonyos részeinek környezeti változóba tárolásához a következõ módszert lehet használni:

 
SUBJECT=`formail -xSubject:` # általános módi FROM=`formail -rt -xTo:` # speckó eset :0 h # harmadik módszer KEYWORDS=| formail -xKeywords:

 

A konfigurációs állományban megadott ideiglenes fileoktól a procmailbõl való kilépés elõtt az alábbi módon szabadulhatunk meg biztosan:

 
TEMPORARY=$HOME/tmp/pmail.$$ TRAP="/bin/rm -f $TEMPORARY"

 

A TRAP kulcsszóval a procmail kilépéskódját (exitcode) is meg lehet változtatni. Pl. ha azt szeretnénk, hogy a kilépéskód 1 legyen a valós kód helyett, akkor a következõre van szükségünk:

 
EXITCODE="" TRAP="exit 1;" # fontos a pontosvesszõ # mivel az exit nem egy önálló program

 

Vagy ha nem szükséges TRAP-on keresztül átadni a kilépéskódot, akkor használjuk egyszerûen csak ezt:

 
EXITCODE=1

 

A következõ szûrõvel az összes postscript formájú levelet automatikusan kinyomtathatjuk.

 
:0 Bb * ^^%! | lpr

 

A következõ szûrõ kicsit intelligensebb, mert csak a nyomtatószerverrõl érkezõ postscript állományokat próbálja meg kinyomtatni. Az elsõ feltétel csak a megfelelõ fejléc esetén érvényesül, míg a második csak akkor, ha a levél törzse a megfelelõ kódot tartalmazza.

 
:0 b * ^From[ :].*print-server * B ?? ^^%! | lpr

 

Mint az elõbb, de kicsit másként:

 
:0 * ^From[ :].*print-server { :0 B b * ^^%! | lpr }

 

Vagy így:

 
:0 HB b * ^^(.+$)*From[ :].*print-server * ^^(.+$)*^%! | lpr

 

Ha két különbözõ helyen van felhasználói azonosítód (account), és szeretnéd, ha mindkét helyen ugyanazok a leveleket olvashatnád, akkor egy egyszerû levél átirányítás (forward) nem lenne nyerõ, mivel ezzel a leveleket a két cím között végtelenségig küldözgetnéd (mail loop). Ennek elkerülésére alkalmas a $HOME/.procmailrc elejére beszúrni az alábbi szûrõt. A lényeg, hogy mindkét helyen az X-Loop: -nak ugyanazt az értéket kell megadni, mert ekkor csak a szükséges levelek kerülnek továbbításra a másik címre.

 
:0 c * !^X-Loop: neved@emailcimed | formail -A "X-Loop: neved@emailcimed" | \ $SENDMAIL -oi neved@emailcimed

 

A levél tárgyában elhelyezett `retrieve' (küldés) parancsra az alábbi szûrõ egy kiválasztott állományt fog automatikusan visszaküldeni. Itt is ügyelni kell, hogy a szûrõ csak a megfelelõ esetben válaszoljon (levelezõlistáknak, saját magunknak ne válaszoljon!).

 
:0 * !^From +YOUR_USERNAME * !^Subject:.*Re: * !^FROM_DAEMON * ^Subject:.*retrieve | (formail -r ; cat info_file) | $SENDMAIL -oi -t

 

A következõkben egy egyszerû emaillel mûködtethetõ fileszervert mutatunk be. Azonban, ha ilyen kiszolgálót szeretnénk mûködtetni, akkor inkább ajánljuk a SmartList programot (amely ugyanonnan beszerezhetõ ahonnan a procmail csomag). A fileszerver maximum 1 állományt küld el a kérésnek megfelelõen, a levél tartalmát nem veszi figyelembe, mivel csak az alábbi felépítésû levéltárgyát fogadja el; "Subject: send file amitszeretnenek" (a szóközök fontosak). (Mg. A magyarosított levelezõprogramok a Subject: mezõ helyett Tárgy: mezõt használhatnak, ez esetben a szûrõt értelemszerûen módosítani szükséges.) Rejtett állományokat és a megadott könyvtáron kívül

 
:0 * ^Subject: send file [0-9a-z] * !^X-Loop: neved@emailcimed * !^Subject:.*Re: * !^FROM_DAEMON * !^Subject: send file .*[/.]\. { MAILDIR=$HOME/fileserver # lekérhetõ állományok helye :0 fhw # válaszlevél létrehozása * ^Subject: send file \/[^ ]* | formail -rA "X-Loop: neved@emailcimed" FILE="$MATCH" # az elküldendõ állomány neve :0 ah | cat - ./$FILE 2>&1 | $SENDMAIL -oi -t }

 

A következõ szûrõvel a megadott MIME kódolású leveleket a sokkal kezelhetõbb 8-bites formátumra lehet átalakítani. A szükséges mimencode(1) program Nathaniel Borenstein metamail csomagjában található.

 
:0 * ^Content-Type: *text/plain { :0 fbw * ^Content-Transfer-Encoding: *quoted-printable | mimencode -u -q :0 Afhw | formail -I "Content-Transfer-Encoding: 8bit" :0 fbw * ^Content-Transfer-Encoding: *base64 | mimencode -u -b :0 Afhw | formail -I "Content-Transfer-Encoding: 8bit" }

 

A következõ példa a procmail egyik alkalmazhatóságát mutatja be. Ha mondjuk egy ".surgos" nevû állományban elhelyezzünk egy személynek a címét, akkor a szûrõ a tõle érkezõ leveleket a $MAILDIR/surgos mappába irányítja át. Az ehhez szükséges szûrõ így néz ki (fontos megjegyezni hogy a $LINEBUF értékét meg kell növelni, ha a $LINEBUF-nál hosszabb az .surgos állomány tartalma):

 
URGMATCH=`cat $HOME/.surgos` :0: * $^From.*${URGMATCH} surgos

 

Egy másik alkalmazási terület lehet, amikor bizonyos leveleken végzünk el módosításokat, átalakításokat. Egy tipikus példa erre, amikor a kimenõ levelek kódolását változtatjuk meg, ha arra szükség van. Ebben az esetben a parancssor közepén használjuk a procmail-t.

 
cat newtext | procmail ./mimeconvert | mail kriszta@cime

 

A mimeconvert konfigurációs állománya pedig valami hasonlót tartalmazhat (a =0x80= és =0xff= kell 8-bites karakterekkel helyettesíteni):

 
DEFAULT=| # a kimenetet a hagyományos kimenetre # irányítjuk a levélküldés helyett :0 Bfbw * [=0x80=-=0xff=] | mimencode -q :0 Afhw | formail -I 'MIME-Version: 1.0' \ -I 'Content-Type: text/plain; charset=ISO-8859-1' \ -I 'Content-Transfer-Encoding: quoted-printable'

 


LÁSD MÉG

procmail(1), procmailrc(5), procmailsc(5), sh(1), csh(1), mail(1), mailx(1), binmail(1), uucp(1), aliases(5), sendmail(8), egrep(1), grep(1), biff(1), comsat(8), mimencode(1), lockfile(1), formail(1)

SZERZÕ

Stephen R. van den Berg
 
<srb@cuci.nl>

 

MAGYAR

Vizi Szilárd <vizisz@freemail.hu>
- Oui il est tout a fait MultiUtilisateur. Tout les users peuvent
configurer leur session comme ils le souhaitent.
-- Jayce - On ne me coince pas comme ça, moi. --