Provided by: manpages-pl_20060617-1_all bug

NAZWA

       procmailex - przykłady plików rc procmaila

SKŁADNIA

       przykłady $HOME/.procmailrc

OPIS

       Dla opisu formatu pliku rc zobacz stronę procmailrc(5).

       Technika   punktów   ważonych   jest  opisana  szczegółowo  na  stronie
       procmailsc(5).

       Ta strona podręcznika pokazuje  kilka  przykładowych  reguł.  Przykłady
       kompletnych   plików   rc   znajdziesz   w   sekcji  UWAGI  podręcznika
       procmail(1), możesz też zajrzeć do przykładowych plików  rc,  które  są
       rozprowadzane   wraz  ze  źródłami  procmaila  jako  część  dystrybucji
       (procmail*/examples/?procmailrc).

PRZYKŁADY

       Posortuj pocztę przychodzącą z listy dyskusyjnej scuba-dive do  folderu
       pocztowego     scubafile    (używa    lokalnego    pliku    blokującego
       scubafile.lock).

              :0:
              * ^TOscuba
              scubafile

       Forwarduj pocztę o kompilatorach od  petera  do  williama  (i  zachowaj
       kopię lokalnie, w petcompil).

              :0
              * ^From.*peter
              * ^Subject:.*compilers
              {
                 :0 c
                 ! william@somewhere.edu

                 :0
                 petcompil
              }

       Równoważne rozwiązanie, które robi to samo:

              :0 c
              * ^From.*peter
              * ^Subject:.*compilers
              ! william@somewhere.edu

                 :0 A
                 petcompil

       Równoważne, lecz trochę wolniejsze rozwiązanie, robiące to samo:

              :0 c
              * ^From.*peter
              * ^Subject:.*compilers
              ! william@somewhere.edu

              :0
              * ^From.*peter
              * ^Subject:.*compilers
              petcompil

       Jeśli   jesteś  nowy  jeśli  chodzi  o  procmaila  i  planujesz  trochę
       poeksperymentować,   to   dobrze   jest   mieć   jakiś   rodzaj   sieci
       bezpieczestwa.   Wstawienie następujących dwóch reguł ponad wszystkimi
       innymi regułami, zapewni, że ostatnie  32  wiadomości  będą  chronione.
       Aby  działało  to  zgodnie  z oczekiwaniami, musisz utworzyć w katalogu
       $MAILDIR katalog `backup'.

              :0 c
              backup

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

       Jeśli twój system nie generuje początkowych linii `From ', lub generuje
       je  w  nieprawidłowy  sposób,  możesz  to naprawić wywołując procmail z
       opcją -f-.  Innym sposobem naprawienia tego  problemu  jest  wstawienie
       następujących  dwóch  reguł  powyżej  wszystkich innych reguł pliku rc.
       Będą one  filtrować  nagłówek  dowolnego  listu  przez  formail,  który
       obetnie wszelkie początkowe `From ' i automatycznie je odtworzy.

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

       Dodaj   nagłówki   wszystkich   wiadomości,   które   nie  przyszły  od
       postmastera,  do  prywatnej  kolekcji  nagłówków  (dla  statystyk,  lub
       debuggowania   poczty);   użyj   pliku  blokującego  `headc.lock'.  Aby
       zapewnić, że plik blokujący nie zostanie  usunięty  przed  zakończeniem
       potoku,  trzeba  podać  opcję  `w'; w przeciwnym wypadku plik blokujący
       zostałby usunięty w momencie przyjęcia przez potok poczty.

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

       Lub jeśli chcesz użyć efektywniejszego gzip-a zamiast compress-a:

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

       Forwarduj wszystkie wiadomości krótsze niż 1000  bajtów  na  mój  adres
       domowy (w tej regule nie potrzebny jest plik blokujący).

              :0
              * < 1000
              ! myname@home

       Podziel  nadchodzący  z  listy dyskusyjnej surfing digest na pojedyncze
       wiadomości i zachowaj je w surfing, używając lokalnego pliku lokującego
       surfing.lock.

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

       Zachowaj  w pliku postm wszystko pochodzące od postmastera, lub mailer-
       deamona. Użyj pliku postm.lock jako lokalnego pliku lokującego.

              :0:
              * ^FROM_MAILER
              postm

       Prosta reguła auto-odpowiadająca. Upewnia  się,  że  nie  odpowiada  na
       pocztę  od  jakiegoś  demona  (np.  odbita  poczta  lub  poczta  z list
       dyskusyjnych),  ani  na  listy  pochodzące  od  ciebie  samego.   Jeśli
       zabezpieczenia  te nie zostaną podjęte, to może się zdarzyć katastrofa.
       Aby reguła odpowiadała na pocztę przychodzącą,  powinieneś  wstawić  ją
       przed  wszystkie inne reguły pliku rc.  Radzi się jednak wstawiać ją za
       wszelkimi  regułami,  które  obsługują   pocztę   pochodzącą   z   list
       dyskusyjnych;   zazwyczaj   nie   jest   dobrym   pomysłem  generowanie
       automatycznych   odpowiedzi   na   listy   dyskusyjne   (tak,    regexp
       !^FROM_DAEMON  powinien  je  wyłapać, jednak jeśli lista dyskusyjna nie
       pracuje zgodnie z konwencjami, to może to być zbyt mało).

              :0 h c
              * !^FROM_DAEMON
              * !^X-Loop: twój@własny.adres.pocztowy
              | (formail -r -A"Precedence: junk" \
                  -A"X-Loop: twój@własny.adres.pocztowy" ; \
                 echo "Poczta odebrana.") | $SENDMAIL -t

       Bardziej skomplikowana reguła  auto-odpowiadająca,  która  implementuje
       funkcjonalność  znanego programu vacation(1).  Reguła ta jest oparta na
       tych samych zasadach co poprzednia. Dodatkowo obsługuje bazę  vacation,
       wyłączając  nazwisko nadawcy i wstawiając je do pliku vacation.cache, o
       ile było ono nowe (plik vacation.cache jest obsługiwany przez  formail,
       który będzie się upewniał, że zawiera tylko najnowsze nazwiska; rozmiar
       pliku jest ograniczony do  8192  bajtów).  Jeśli  nazwisko  było  nowe,
       wysłana zostanie auto-odpowiedź.

              SHELL=/bin/sh    # dla innych powłok trzeba to poprawić

              :0 Whc: vacation.lock
              * !^FROM_DAEMON
              * !^X-Loop: twój@własny.adres.pocztowy
              | formail -rD 8192 vacation.cache

                :0 ehc         # jeśli nazwiska nie było w cache
                | (formail -rA"Precedence: junk" \
                     -A"X-Loop: twój@własny.adres.pocztowy" ; \
                   echo "Odebrałem twój list,"; \
                   echo "lecz nie wrócę do poniedziałku."; \
                   echo "-- "; cat $HOME/.signature \
                  ) | $SENDMAIL -oi -t

       Wszelkie  wiadomości dotyczące TeX-a zachowaj w oddzielnych, unikalnych
       nazwach pliku, w katalogu o nazwie texmail (katalog musi istnieć);  nie
       ma  potrzeby  używać  w  tym  wypadku  plików blokujących, więc ich nie
       używamy.

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

       To samo co powyżej, lecz teraz zapisujemy listy w numerowanych  plikach
       (folder pocztowy MH).

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

       Możesz  też wprowadzić list do kilku folderów naraz. Następująca reguła
       dostarczy pocztę do dwóch folderów MH i jednego  folderu  katalogowego.
       Jest   to  w  rzeczywistości  tylko  jeden  plik  z  dwoma  dodatkowymi
       dowiązaniami twardymi (hardlinks).

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

       Zachowaj wszystkie listy o spotkaniach  (meetings)  w  folderze,  który
       jest  w comiesięcznie zmienianym katalogu . Np. jeśli był Styczeń 1994,
       folder miałby nazwę 94-01/meeting, a lokalny plik  blokujący  nazywałby
       się `94-01/meeting.lock'.

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

       To  samo  co  wyżej,  lecz  jeśli  katalog  `94-01'  nie  istniałby, to
       automatycznie zostanie utworzony:

              MONTHFOLDER=`date +%y-%m`

              :0 ic
              * ? test ! -d $MONTHFOLDER
              | mkdir $MONTHFOLDER

              :0:
              * meeting
              ${MONTHFOLDER}/meeting

       To samo co powyżej, lecz z użyciem innych środków:

              MONTHFOLDER=`date +%y-%m`
              DUMMY=`test -d $MONTHFOLDER || mkdir $MONTHFOLDER`

              :0:
              * meeting
              ${MONTHFOLDER}/meeting

       Jeśli  jesteś  podłączony  do  kilku  list   dyskusyjnych,   a   ludzie
       crosspostują  na  niektóre  z  nich,  to możesz otrzymywać zduplikowane
       listy  (po  jednym  z  każdej  listy).  Następująca  reguła   eliminuje
       powtórzone  listy.  Mówi formailowi by trzymał 8KB plik cache, w którym
       będzie  zapisywał  Message-ID  ostatnio  odbieranych  listów.  Ponieważ
       elementy te muszą być unikalne dla każdego nowego listu, to są idealnym
       rozwiązaniem na  duplikaty.  Wstaw  zwyczajnie  następującą  regułę  na
       początek swojego pliku rc i gotowe.

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

       Podczas  bezpośredniego  dostarczania  do folderów emacsa (np. folderów
       pocztowych obsługiwanych przez dowolny pocztowy  pakiet  emacsowy,  np.
       RMAIL  czy  VM),  powinieneś  używać  kompatybilnych  z  emacsem plików
       blokujących. Mailerom emacsowe brakuje piątej klepki pod tym  względem,
       denerwują  się  bardzo  jeśli  ktoś dostarcza pocztę do folderów, które
       znajdują się  już  w  ich  buforach  wewnętrznych.  Następująca  reguła
       zakłada, że $HOME odpowiada /home/john.

              MAILDIR=Mail

              :0:/usr/local/lib/emacs/lock/!home!john!Mail!mailbox
              * ^Subject:.*cokolwiek
              mailbox

       Inaczej,  możesz kazać procmailowi dostarczać pocztę do swoich własnych
       mailboxów, a następnie periodycznie opróżniać je i kopiować  do  plików
       emacsowych  przy  użyciu  movemail.   Movemail  używa  lokalnych plików
       blokujących mailbox.lock dla danego mailboxa.

       Aby wyciągnąć określone nagłówki z listu  i  wstawić  je  do  zmiennych
       środowiskowych, możesz użyć dowolnej z następujących konstrukcji:

              SUBJECT=`formail -xSubject:`    # pole regularne
              FROM=`formail -rt -xTo:`        # przypadek specjalny

              :0 h                            # metoda alternatywna
              KEYWORDS=| formail -xKeywords:

       Jeśli  używasz  w pliku procmailrc plików tymczasowych i chcesz upewnić
       się, że są one usuwane zaraz przed zakończeniem pracy procmaila, możesz
       użyć linijek podobnych do tych:

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

       Słowo  kluczowe  TRAP  może  być  także  użyte  do  zmiany kodu wyjścia
       procmaila. Np. jeśli chcesz by procmail zakończył pracę z kodem wyjścia
       `1' zamiast standardowego kodu, możesz użyć:

              EXITCODE=""
              TRAP="exit 1;"   # Kończący średnik jest istotny
                               # gdyż exit nie jest samodzielnym programem

       Albo  też jeśli kod wyjścia nie musi zależeć od programów uruchamianych
       z TRAP, możesz użyć zwykłego:

              EXITCODE=1

       Następująca reguła drukuje każdy nadchodzący list,  który  wygląda  jak
       plik postscriptowy.

              :0 Bb
              * ^^%!
              | lpr

       Następująca  reguła robi to samo, lecz jest trochę bardziej selektywna.
       Drukuje tylko te pliki postscriptowe, które pochodzą od  print-serwera.
       Pierwszy warunek dopasowuje tylko jeśli zostanie znaleziony w nagłówku.
       Następny dopasowuje tylko na początku ciała wiadomości.

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

       To samo co wyżej, lecz z użyciem innych środków:

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

       Podobnie:

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

       Załóżmy, że masz dwa konta i że używasz ich obu regularnie, lecz są one
       w  różnych  miejscach (np. możesz czytać pocztę z tylko jednego z dwóch
       kont).  Jeśli chciałbyś forwardować pocztę przybywającą na konto  jeden
       do  konta  dwa  i  odwrotnie. Pierwszą rzeczą, która przychodzi na myśl
       jest użycie na obydwu hostach plików .forward;  lecz  to  nie  zadziała
       gdyż  utworzysz  pętlę pocztową.  Możesz uniknąć pętli przez wstawienie
       następującej reguły na  początku  wszystkich  innych  reguł  w  plikach
       $HOME/.procmailrc obydwu hostów. Jeśli upewnisz się, że dodałeś te samo
       pole X-Loop: na obydwu  hostach,  to  poczta  może  już  być  spokojnie
       forwardowana na drugie konto.

              :0 c
              * !^X-Loop: twojlogin@twoj.adres.pocztowy
              | formail -A "X-Loop: twojlogin@twoj.adres.pocztowy" | \
                 $SENDMAIL -oi twojlogin@drugie.konto

       Jeśli  ktoś  przesyła  ci  pocztę  ze  słowem  `retrieve' w temacie, to
       następująca reguła automatycznie  odeśle  z  powrotem  zawartość  pliku
       info_file. Jak we wszystkich regułach, uważamy na pętle pocztowe.

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

       A  teraz  przykład  bardzo  prostego  serwera  plików  dostępnego przez
       pocztę.  Dla bardziej wymagających aplikacji, sugeruję  rzucenie  okiem
       na  SmartList  (dostępne w tym samym miejscu co dystrybucja procmaila).
       Ten serwer plików odsyła najwyżej jeden plik na dane żądanie,  ignoruje
       ciało  nadchodzących  listów, a linia tematu Subject: musi wyglądać jak
       "Subject: send  file  plik_którego_chcesz"  (spacje  są  istotne),  nie
       zwraca  plików,  które  mają  nazwy  rozpoczynające się od kropki i nie
       umożliwia odbioru plików spoza drzewa katalogów serwera plików.

              :0
              * ^Subject: send file [0-9a-z]
              * !^X-Loop: twojlogin@twoj.adres.pocztowy
              * !^Subject:.*Re:
              * !^FROM_DAEMON
              * !^Subject: send file .*[/.]\.
              {
                MAILDIR=$HOME/fileserver # zmień katalog do katalogu serwera plików

                :0 fhw                   # odwróć nagłówek listu i wyciągnij nazwę
                * ^Subject: send file \/[^ ]*
                | formail -rA "X-Loop: twojlogin@twoj.adres.pocztowy"

                FILE="$MATCH"            # żądany plik

                :0 ah
                | cat - ./$FILE 2>&1 | $SENDMAIL -oi -t
              }

       Następujący przykład zamienia wstępnie wszystkie przychodzące  listy  w
       czystym  tekście,  kodowane  w  formatach  MIME  na  ładniejszy  format
       8-bitowy, który może być używany i wyświetlany w prostszy sposób  przez
       większość   programów.    Program  mimencode(1)  jest  częścią  pakietu
       metamail Nathaniela Borensteina.

              :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"
              }

       Następujący  przykład  jest  raczej  egzotyczny,   lecz   służy   tylko
       ilustracji  właściwości. Załóżmy, że masz w swoim katalogu domowym plik
       o nazwie ".pilne", a osoba wymieniona  w  tym  pliku  jest  wysyłającym
       nadchodzącego  listu  i chciałbyś, by ten list był zachowany w katalogu
       $MAILDIR.pilne zamiast w dowolnym  z  normalnych  folderów  pocztowych.
       Możesz  wówczas  zrobić  tak  (uważaj, długość $HOME/.pilne powinna być
       niższa niż $LINEBUF, jeśli to konieczne, zwiększ wartość LINEBUF):

              URGMATCH=`cat $HOME/.pilne`

              :0 B:
              * $^From.*${URGMATCH}
              pilne

       Całkowicie innym zastosowaniem procmaila  byłoby  warunkowe  dołączanie
       filtrów  do  niektórych  (wychodzących)  tekstów  lub  listów.  Typowym
       przykładem byłoby filtrowanie, w którym używasz potoków dla  wszystkich
       wychodzących  list  aby  upewnić  się czy będziemy kodować w MIME tylko
       wtedy gdy to konieczne.  Np. w tym wypadku możesz  uruchomić  procmaila
       wewnątrz potoku rodzaju:

              cat newtext | procmail ./mimeconvert | mail chris@where.ever

       Plik  rc  mimeconvert  powinien zawierać coś w rodzaju (=0x80= i =0xff=
       powinny być zamienione prawdziwymi 8-bitowymi znakami):

              DEFAULT=|     # potok na stdout zamiast
                            # dostarczania pocztę jak zwykle
              :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'

ZOBACZ TAKŻE

       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)

AUTOR

       Stephen R. van den Berg z RWTH-Aachen, Germany
              berg@pool.informatik.rwth-aachen.de