Provided by: manpages-hu_20010119-5_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
       tancs.  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  utn  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 ksrtsk a sorsot , ha mgsem  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>