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 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>