Provided by: manpages-hu_20010119-6_all bug

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 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>
       Vizi Szilárd <vizisz@freemail.hu>

BuGless                                            1999/03/02                                      PROCMAILEX(5)