Provided by: manpages-pl_4.27.0-1_all bug

NAZWA

       procmailex - przykłady plików rc procmaila

SKŁADNIA

       przykłady $HOME/.procmailrc

OPIS

       Opisu formatu pliku rc znajduje się w 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 znajdują się w
       sekcji  UWAGI  podręcznika  procmail(1);  można  też  zajrzeć  do  przykładowych  plików  rc  w  katalogu
       /usr/share/doc/procmail/examples.

PRZYKŁADY

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

              :0: * ^TOscuba scubafile

       Forwarduje pocztę o kompilatorach od petera do williama (i zachowuje kopię lokalnie w pliku 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

       Nowicjusze w temacie procmaila, planujący trochę z nim poeksperymentować, powinni  zapewnić  sobie  jakiś
       rodzaj  sieci  bezpieczeństwa.  Wstawienie  następujących  dwóch  reguł przed wszystkimi innymi regułami,
       zapewni, że ostatnie 32 wiadomości będą chronione.  Aby działało to zgodnie z oczekiwaniami, należy przed
       dodaniem tych dwóch reguł, w katalogu $MAILDIR utworzyć katalog o nazwie "backup".

              :0 c backup

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

       Jeśli system nie generuje początkowych linii "From " lub generuje je w nieprawidłowy sposób, to można  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 za pomocą formail(1), który obetnie wszelkie początkowe "From " i automatycznie je odtworzy.

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

       Dodaje nagłówki wszystkich wiadomości, które nie przyszły od postmastera, do prywatnej kolekcji nagłówków
       (dla statystyk lub debuggowania poczty); używa 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 poczty przez potok.

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

       Lub aby użyć efektywniejszego gzip-a zamiast compress-a:

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

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

              :0 * < 1000 ! myname@home

       Dzieli  pochodzącą z listy dyskusyjnej surfing kolekcję wiadomości (ang. digest) na pojedyncze wiadomości
       i zachowuje je w pliku surfing, używając lokalnego pliku blokującego surfing.lock.

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

       Zachowuje w pliku postm wszystkie e-maile pochodzące  od  postmastera  lub  mailer-deamona.  Użyje  pliku
       postm.lock jako lokalnego pliku blokują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. Bez  tych  zabezpieczeń
       mogłaby  się  zdarzyć  katastrofa.  Aby reguła odpowiadała na pocztę przychodzącą, powinno się ją wstawić
       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 pocztę z list dyskusyjnych (tak, regexp !^FROM_DAEMON powinien  je  wyłapać,
       jednak   jeśli   lista  dyskusyjna  nie  pracuje  zgodnie  z  przyjętymi  konwencjami,  to  może  to  być
       niewystarczające).

              :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 (zapobieganie odbijania maili
       od demonów). Dodatkowo utrzymuje bazę danych vacation, wyciągając nazwę nadawcy i wstawiając ją do  pliku
       vacation.cache,  o  ile  była to nowa nazwa (plik vacation.cache jest obsługiwany przez formail(1), 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 automatycznie wygenerowana odpowiedź.

       Jak można zauważyć następująca reguła zawiera komentarze pomiędzy warunkami. Jest to dozwolone.  Jednakże
       nie można wpisywać komentarzy w linii zawierającej warunek.

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

              :0 Whc: vacation.lock
               # Szybkie sprawdzenie, czy poczta jest adresowana do nas
              * $^To:.*\<$\LOGNAME\>
               # Nie odpowiadaj na maile od usług lub z list pocztowych
              * !^FROM_DAEMON
               # Pętle pocztowe to zło
              * !^X-Loop: your@own.mail.address
              | 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

       Zachowuje  wszelkie  wiadomości  dotyczące TeX-a w oddzielnych plikach o unikatowych nazwach 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 zapisuje listy w plikach numerowanych (folder pocztowy MH).

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

       Można  także  zapisać list w kilku folderach 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/.

       Zachowuje  wszystkie  listy o spotkaniach (meetings) w folderze znajdującym się w katalogu, którego nazwa
       się zmienia co miesiąc. 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śliby katalog "94-01" nie istniał, toby został automatycznie utworzony:

              MONTHFOLDER=`date +%y-%m`

              :0 Wic * ? 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  jest się zapisanym do kilku list dyskusyjnych, a ludzie wysyłają te same maile na niektóre z nich,
       to może się zdarzyć, że otrzyma się zduplikowane listy (po jednym z  każdej  listy).  Następująca  reguła
       eliminuje  powtórzone  maile.  Mówi  formailowi,  by  trzymał  8-kilobajtowy plik bufora, w którym będzie
       zapisywał Message-ID ostatnio odbieranych listów. Ponieważ elementy te muszą być  unikatowe  dla  każdego
       nowego  listu, to są idealnym rozwiązaniem na duplikaty. Wystarczy wstawić następującą regułę na początek
       pliku rc i gotowe.

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

       Uwaga: jeśli wystąpią problemy z dostarczaniem poczty w regułach występujących po tej regule  i  procmail
       spróbuje  wrzucić  mail  z powrotem do kolejki, to w czasie następnego uruchomienia kolejki mail zostanie
       uznany za duplikat i wyrzucony. Ktoś, kto nie ma  zbyt  dużych  umiejętności  w  pisaniu  skryptów,  może
       spróbować  użyć  następującej  reguły,  która  zapisze  duplikaty  w osobnym folderze zamiast wyrzucać je
       całkowicie. Folder ten można od czasu do czasu przeglądać i opróżniać.

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

              :0 a: duplicates

       Procmail może dostarczać pocztę bezpośrednio do folderów MH, ale nie aktualizuje pliku sekwencji,  którym
       zarządza  prawdziwe MH, zawierającego informacje o nieprzeczytanej poczcie. Aby procmail aktualizował ten
       plik także, należy użyć reguły podobnej do poniższej. Reguła ta zapisze wszystko,  co  zawiera  w  treści
       maila  słowo "spam" do folderu MH zwanego spamfold. Proszę zwrócić uwagę na lokalny plik blokujący, który
       jest potrzebny, ponieważ programy MH nie blokują pliku sekwencji. Asynchroniczne  uruchomienia  programów
       MH,  które  zmieniają  plik  sekwencji,  mogą  spowodować  jego  uszkodzenie.  Niestety  plik blokady nie
       rozwiązuje całkowicie problemu, ponieważ rcvstore(1) może zostać uruchomiony w czasie  działania  poleceń
       "show" lub "mark" lub jakiegoś innego programu MH. Problem ma zostać rozwiązany w przyszłych wersjach MH,
       zanim to jednak nastąpi należy się liczyć z ryzykiem uszkodzenia plików sekwencji.

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

       Podczas  bezpośredniego  dostarczania  do  folderów  emacsa  (np. folderów pocztowych obsługiwanych przez
       dowolny pocztowy pakiet emacsowy, np. RMAIL czy VM), powininno się używać kompatybilnych z emacsem plików
       blokujących. Mailerom emacsowym 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 jest równy /home/john.

              MAILDIR=Mail

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

       Inaczej, można 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(1).  Movemail  używa  lokalnych  plików
       blokujących  mailbox.lock  dla danego mailboxa. Jest to preferowany tryb współpracy emacsowych mailerów z
       procmailem.

       Aby wyciągnąć określone nagłówki z listu i wstawić je do zmiennych środowiskowych, można 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  w pliku .procmailrc używane są pliki tymczasowe, to aby upewnić się, że zostaną one usunięte zaraz
       przed zakończeniem pracy procmaila, można 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.  aby  procmail  zakończył
       pracę z kodem wyjścia "1" zamiast standardowego kodu, można 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żna 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 serwera drukarki. 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 powyż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  mamy  dwa  konta  i  że  oba  są używane regularnie, lecz znajdują się w całkowicie różnych
       miejscach (tj. można czytać pocztę tylko  z  jednego  z  dwóch  kont).  Chcielibyśmy  przekazywać  pocztę
       przybywającą  na  konto pierwsze do konta drugiego i odwrotnie. Pierwszą rzeczą, która przychodzi na myśl
       jest użycie na obydwu komputerach plików .forward, lecz to nie zadziała, gdyż utworzy się  w  ten  sposób
       pętlę  pocztową.  Można  uniknąć pętli przez wstawienie następującej reguły na początku wszystkich innych
       reguł w plikach $HOME/.procmailrc obydwu komputerach.  Jeśli  dodane  zostanie  dokładnie  to  samo  pole
       "X-Loop:" na obydwu komputerach, to poczta może już być bezpiecznie przekazywana z jednego z tych kont na
       drugie.

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

       Jeśli  ktoś  prześle  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, należy uważać 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ę  zapoznanie się z programem SmartList (dostępnym w tym samym miejscu, co dystrybucja
       procmaila). Ten serwer plików odsyła najwyżej jeden plik na żą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 (dostosowując ten przykład do własnych potrzeb, prosimy pamiętać  o  tym,
       by nieumyślnie nie zdjąć ostatniego z wymienionych ograniczeń).

              :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 nadawcą  nadchodzącego
       listu  i chciałbyś, by ten list był zachowany w skrzynce "$MAILDIR/pilne" zamiast w dowolnym z normalnych
       folderów pocztowych. Można wówczas zrobić tak (uwaga: długość pliku $HOME/.pilne powinna być mniejsza niż
       $LINEBUF, jeśli to konieczne, należy zwiększyć wartość LINEBUF):

              URGMATCH=`cat $HOME/.pilne`

              :0: * $^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żywane byłyby potoki dla  wszystkich
       wychodzących  e-maili,  aby ustawić kodowanie MIME tylko wtedy, gdy to konieczne. W takim przypadku można
       uruchomić procmaila wewnątrz potoku na przykład w taki sposób:

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

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

              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), uucp(1), aliases(5),
       sendmail(8), egrep(1), grep(1), biff(1), comsat(8), mimencode(1), lockfile(1), formail(1)

AUTORZY

       Stephen R. van den Berg
              <srb@cuci.nl>
       Philip A. Guenther
              <guenther@sendmail.com>

TŁUMACZENIE

       Tłumaczenie   niniejszej  strony  podręcznika:  Przemek  Borys  <pborys@dione.ids.pl>  i  Robert  Luberda
       <robert@debian.org>

       Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje  o  warunkach  licencji  można  uzyskać
       zapoznając   się   z   GNU General Public License w wersji 3   lub  nowszej.  Nie  przyjmuje  się  ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej  manpages-pl-
       list@lists.sourceforge.net.

BuGless                                            2001/08/04                                      PROCMAILEX(5)