Sztuczki z pocztą

Nie tak dawno, przedstawiając program wget, zachwalałem zarazem zalety posiadania konta z dostępem do shella na serwerze Unixowym. Dziś będzie o kolejnych pożytkach płynących z takiego konta - możliwości automatycznego manipulowania w różnoraki sposób przychodzącą do nas pocztą. Poczta elektroniczna jest bowiem jednym z bardzo głębokich mechanizmów systemu Unix, którego możliwości wykraczają daleko poza to, co widzi przeciętny użytkownik konta POP3 - prymitywną skrzynkę pocztową, z której można tylko ściągać listy na swój komputer, kasując je równocześnie z serwera lub nie. Tymczasem w istocie w Unixie za pomocą poczty da się zrobić wszystko... no, może prawie wszystko. Ale zacznijmy od rzeczy najprostszych...

Poproszę na inny adres

Wraz z nadejściem epoki kont "tylko do poczty" (zwłaszcza darmowych), które umożliwiają jedynie ściąganie listów ze skrzynki pocztowej przy pomocy protokołu POP3, pojawiło się "nieśmiertelne" pytanie, które wciąż od nowa zadawane jest w grupach dyskusyjnych: "jakie programy obsługują wiele kont?". Sporo jest bowiem użytkowników chcących posiadać więcej niż jedno konto pocztowe, zaś nie każdy program działający w trybie POP3 potrafi ściągać pocztę z kilku kont równocześnie.

Posiadacze kont shellowych nigdy nie mieli takiego problemu, "od zawsze" dysponowali bowiem mechanizmem, dzięki któremu niezależnie od tego, ile by się nie miało kont, nigdy nie trzeba sprawdzać poczty na więcej niż jednym. Listy ze wszystkich pozostałych kont mogą być bowiem automatycznie przesyłane na jedno, które sobie wybierzemy.

Praktycznie każdy system transportu poczty działający w Unixie pozwala użytkownikowi zrealizować tzw. autoforward, czyli automatyczne przekazywanie poczty przychodzącej na to konto pod inny adres. W tym celu w swoim katalogu macierzystym użytkownik powinien utworzyć plik o nazwie .forward (kropka na początku nazwy!), zawierający jedną linijkę - adres, na który ma być przekazywana poczta. To wystarczy - od tego momentu każdy przychodzący list, zamiast trafiać do naszej skrzynki pocztowej, będzie przesyłany pod nowy adres!

Plik taki możemy utworzyć dowolnym edytorem dostępnym w danym systemie Unixowym. Większość serwerów udostępniających konta pocztowe ma zainstalowane łatwe w obsłudze edytory pico bądź joe; można też użyć nieco trudniejszego programu emacs lub standardowego Unixowego vi (ale to wariant dla prawdziwych "twardzieli", gdyż jest to program wyjątkowo nieprzyjazny dla użytkownika). Często jednak najłatwiej jest wpisać treść tego pliku wykorzystując po prostu Unixową komendę cat. Po zgłoszeniu systemu piszemy:

     cat >.forward
i wciskamy Enter. Komenda ta nakazuje systemowi rozpoczęcie przepisywania tekstu z klawiatury do pliku .forward; w następnym, pustym wierszu wpisujemy zatem adres, pod który chcemy przekazywać pocztę, i naciskamy ponownie Enter, a następnie Ctrl-D, co dla Unixa jest sygnałem końca pliku. Plik zostaje zapisany na dysku i wracamy do zgłoszenia systemu - na ekranie wygląda to mniej więcej w taki sposób:

     ultra$ cat >.forward
     nowy@adres.dla.poczty
     ^D
     ultra$
(konkretna postać zgłoszenia systemu będzie oczywiście zależeć od tego, jak skonfigurował ją na danym serwerze administrator; tu użyto przykładowego zgłoszenia składającego się z nazwy komputera - "ultra" i znaku $).

W większości systemów (tylko raz zdarzyło mi się spotkać system, który na to nie pozwalał) możemy wpisać w pliku .forward kilka adresów, oddzielając je przecinkami, przekazując w ten sposób pocztę na wszystkie te adresy równocześnie. Ta możliwość może przydać się do utworzenia konta "grupowego", pozwalającego na czytanie listów przez kilka osób. Np. w firmie możemy utworzyć konto o nazwie "zarzad", z którego poczta trafiać będzie na indywidualne konta wszystkich członków zarządu.

Najczęstszym jednakże zastosowaniem tej możliwości jest zachowanie w skrzynce pocztowej kopii otrzymanego listu. Jak bowiem wspomniano powyżej, gdy na koncie znajduje się plik .forward, otrzymywana poczta przekazywana jest tylko na adres (lub adresy) wymienione w tym pliku, bez umieszczania w skrzynce użytkownika! Jeżeli np. właścicielka konta kate@firma.com.pl ma w pliku .forward wpisany adres kasia@provider.net.pl, to wszystkie listy wysłane na pierwszy adres zostaną od razu przesłane na drugi, nie trafiając do skrzynki pocztowej na koncie "kate". Czasami właśnie o to nam chodzi; czasami natomiast chcemy, aby kopie listów pozostawały w skrzynce. Gdyby nasza "kate" chciała pozostawiać kopie listów, musiałaby w pliku .forward wpisać:

     \kate,kasia@provider.net.pl
Pierwszy adres w tym pliku - "\kate" - jawnie nakazuje przesłanie listu do skrzynki pocztowej użytkownika "kate" na danym serwerze. Znak "\" na początku tego adresu oznacza pominięcie interpretacji pliku .forward i umieszczenie listu wprost w skrzynce. Jest on tu bardzo istotny; gdyby tego znaku nie było, przesłanie listu na adres "kate" odwoływałoby się znów do pliku .forward, powodując kolejne przesłanie listu na adres "kate" itd. - powstałaby tzw. "pętla pocztowa".

Przy korzystaniu z plików .forward trzeba bardzo uważać, aby nie spowodować tego typu "pętli". Obok "zapętlenia" poczty w obrębie jednego serwera, jak w przypadku pominięcia znaku "\" w powyższym przykładzie, możemy mieć również do czynienia z sytuacją, gdy poczta "odbija się" pomiędzy dwoma (lub kilkoma) serwerami. Załóżmy, że nasza Kasia z poprzedniego przykładu doszła do wniosku, że na obydwu swoich kontach chce mieć te same listy, a zatem nie tylko poczta z pierwszego konta powinna być przesyłana na drugie, ale i na odwrót. Mając na koncie kate@firma.com.pl plik .forward przedstawiony powyżej, umieszcza więc na drugim koncie analogiczny plik o treści:

     \kasia,kate@firma.com.pl
I co się dzieje? Gdy przychodzi list na konto kate@firma.com.pl, jest on pozostawiany w skrzynce pocztowej i przesyłany na drugie konto. Tu, zgodnie z plikiem .forward, list jest pozostawiany w skrzynce pocztowej i... odsyłany na powrót na pierwsze konto, gdzie jest pozostawiany w skrzynce pocztowej i przesyłany... i tak w koło Macieju.

Chcąc skonfigurować tego typu wzajemny autoforward między dwoma kontami, musimy spowodować, aby na drugim koncie, na które przekazujemy list, plik .forward nie był już brany pod uwagę - czynimy to znowu przez użycie znaku "\". A zatem na pierwszym koncie plik .forward będzie miał postać

     \kate,\kasia@provider.net.pl
zaś na koncie kasia@provider.net.pl:

     \kasia,\kate@firma.com.pl
Użycie backslasha przed obydwoma adresami, na które przesyłany ma być list, zapewnia, że na każdym z kont plik .forward zostanie pominięty i list dostarczony bezpośrednio do skrzynki pocztowej.

E-mailowa automatyczna sekretarka

Przesyłanie poczty na inne adresy to zaledwie wstęp do szerszych możliwości jej automatycznego przetwarzania. Umieszczenie w pliku .forward specjalnego rodzaju "adresów" umożliwia przesłanie listu do dowolnego programu, automatycznie uruchamianego na naszym koncie w chwili otrzymania poczty. To zaś, co program zrobi z otrzymanym w ten sposób listem, nie podlega już żadnym ograniczeniom...

Aby wykorzystać tę możliwość, "adres" umieszczany w pliku .forward powinien mieć postać

     "|komenda"
gdzie komenda może być dowolną komendą poprawną w systemie Unix. Treść listu przekazywana jest na standardowe wejście podanej komendy. Komenda powinna być zapisana z użyciem pełnej ścieżki dostępu, ponieważ wartość zmiennej PATH stosowana przy uruchamianiu programów z pliku .forward jest bardzo okrojona w stosunku do używanej przy pracy interakcyjnej, co może spowodować nieodnalezienie programu, jeżeli użyjemy tylko samej jego nazwy. Całą komendę, wraz z poprzedzającym ją znakiem "|", należy ująć w cudzysłowy.

Jednym z ciekawszych zastosowań tej możliwości jest automatyczne odpowiadanie na listy. Jeżeli np. wyjeżdżamy na urlop, lub z innego powodu nie będziemy czytać poczty przez kilka czy kilkanaście dni, możemy skonfigurować na naszym koncie "automatyczną sekretarkę", wysyłającą w odpowiedzi na przychodzące do nas listy przygotowany wcześniej tekst, informujący o naszej nieobecności i planowanym terminie powrotu. Dzięki temu osoby wysyłające do nas listy nie muszą się niepokoić naszym brakiem odpowiedzi i zastanawiać nad jego przyczynami; jest to wskazane zwłaszcza dla osób wykorzystujących e-mail do celów zawodowych i otrzymujących wiele korespondencji.

Większość systemów Unixowych zawiera przeznaczony specjalnie do takich zastosowań program o nazwie vacation, umożliwiający skonfigurowanie tej funkcji w łatwy sposób. Jeżeli dotąd nie używaliśmy tego programu, przy pierwszym uruchomieniu najpierw uruchomi on edytor, dając nam możliwość zredagowania tekstu, który będzie wysyłany jako odpowiedź na kierowane do nas listy. Program proponuje domyślny tekst w języku angielskim, który oczywiście możemy całkowicie zastąpić własnym. Możemy też zmienić zaproponowane przez program nagłówki "From:" i "Subject:" (ale raczej nie należy ich usuwać...), ewentualnie dopisać inne, które chcielibyśmy umieścić w liście. Tu niestety możemy natknąć się na pewien problem - otóż może zdarzyć się, że edytorem wywoływanym przez vacation będzie ów niezbyt przyjazny standardowy vi (zależy to od konfiguracji systemu, a raczej jej braku). Jeżeli pojawi się on nam na ekranie - co można poznać po tym, że wszystkie wiersze znajdujące się poniżej edytowanego tekstu zawierać będą znak "~" - należy z niego wyjść (wciskając kolejno klawisze dwukropka, q i Enter) i skonfigurować system do użycia innego edytora - jak to zrobić, piszę nieco dalej.

Przy każdym następnym uruchomieniu programu ten etap wstępnego wywołania edytora zostanie już pominięty; program najpierw zapyta nas, czy chcemy obejrzeć treść przygotowanej odpowiedzi, a następnie, czy chcemy ją edytować (pytania te pojawiają się także przy pierwszym uruchomieniu, po wyjściu z edytora). Odpowiedź twierdząca na to pytanie spowoduje wywołanie edytora, a po wyjściu z niego - znowu te same dwa pytania. Sytuacja taka będzie się powtarzać, dopóki nie odpowiemy "n" na pytanie o chęć edytowania pliku. Wówczas program zaproponuje nam utworzenie pliku .forward (o ile taki plik jeszcze nie istnieje w naszym katalogu), zawierającego wywołanie programu vacation dla odpowiedzi na listy. Odpowiedź twierdząca tworzy plik i tym samym uaktywnia program.

Jeżeli natomiast mamy już w katalogu plik .forward, program vacation - najwidoczniej zakładając, że jest to "jego" plik - proponuje jego usunięcie, aby wyłączyć funkcję automatycznej odpowiedzi. Oczywiście nie jest to zachowanie zbyt inteligentne w sytuacji, gdy pliku tego używamy do innych celów; w takim przypadku niestety naszą "automatyczną sekretarkę" będziemy musieli włączać i wyłączać poprzez ręczne dopisywanie lub usuwanie wywołania programu vacation w pliku .forward.

"Wzorcowy" plik .forward, który tworzy program vacation, ma postać:

     \nazwa,"|/usr/bin/vacation nazwa"
gdzie "nazwa" jest nazwą naszego konta. List jest zatem pozostawiany w skrzynce pocztowej oraz przesyłany do programu vacation, który zajmuje się wysłaniem odpowiedzi do nadawcy. Parametr nazwa w wywołaniu programu vacation jest obowiązkowy, oprócz niego może natomiast wystąpić kilka innych parametrów (musimy je już dopisać ręcznie), z których najbardziej użytecznym jest chyba parametr -t. Otóż program vacation, aby nie "zasypywać" piszących do nas osób powtarzającymi się automatycznymi odpowiedziami na każdy list, zapamiętuje adresy osób, które do nas napisały, i pod każdy adres wysyła odpowiedź tylko raz w ciągu ustalonego okresu czasu. Domyślnie okres ten wynosi tydzień; wspomniany parametr -t pozwala nam go zmienić. Jeżeli w wywołaniu programu vacation dopiszemy np. parametr -t3w, okres, w ciągu którego program ma nie wysyłać ponownie odpowiedzi, wydłuży się do 3 tygodni (w=weeks). Jeżeli natomiast podamy -t4d, okres ten skróci się do 4 dni (d=days). Można jeszcze stosować jednostki takie, jak godziny (h), minuty (m) i sekundy (s), wątpliwe jest jednak, aby ktoś chciał używać programu vacation na tak krótki okres nieobecności.

Po powrocie z wyjazdu i usunięciu programu vacation z pliku .forward przydatne może być wykonanie komendy vacation -I (uwaga na dużą literę!). "Czyści" ona bazę zapamiętanych adresów użytkowników, którzy do nas pisali, przygotowując w ten sposób program do następnego użycia.

Program ma jeszcze kilka innych ciekawych możliwości. Próbuje otóż rozpoznawać listy pochodzące z list dyskusyjnych (choć nie zawsze udaje mu się to w stu procentach, ale to już raczej wina niestandardowych konfiguracji listserwerów obsługujących takie listy) i nie wysyła na nie odpowiedzi; nie wysyła także odpowiedzi na komunikaty o niemożliwości doręczenia poczty, generowane przez serwery pocztowe. Nie odpowiada również na listy, które nie były adresowane bezpośrednio do nas, lecz zostały np. przeforwardowane z innego konta; aby zezwolić na odpowiadanie na tę ostatnią grupę listów, należy dodać w wywołaniu programu parametr -j. Dokładną informację o sposobie użycia programu można - jak zawsze w Unixie - uzyskać komendą man vacation.

Jak wspomniałem, może się zdarzyć, iż edytorem wywoływanym przez program vacation do edycji tekstu odpowiedzi będzie standardowy Unixowy edytor vi. Dzieje się tak wówczas, gdy administrator systemu nie skonfigurował innego edytora systemowego; musimy to wówczas zrobić we własnym zakresie. Sposób wykonania tej czynności zależy od tego, jaki typ shella (części systemu interpretującej polecenia użytkownika) jest używany na danym komputerze, dlatego najpierw musimy dowiedzieć się z jakim shellem mamy do czynienia. Wszystkie shelle dają się z grubsza podzielić na dwie grupy: shelle Bourne'a (podstawowi reprezentanci tej grupy to sh, bash i ksh) i shelle C (csh, tcsh). Najlepiej zapytać o rodzaj shella administratora systemu. Jeżeli jest to niemożliwe, można użyć innych sposobów, np. obejrzeć informacje o własnym koncie wyświetlane przez komendę finger (trzeba wpisać: "finger nazwa", gdzie "nazwa" jest nazwą naszego konta) - jedną z podawanych informacji powinna być nazwa naszego shella. Można też spróbować rozpoznać typ shella z postaci zgłoszenia systemu; z reguły w shellach Bourne'a zgłoszenie systemu kończy się znakiem "$", natomiast w shellach C - znakiem "%", aczkolwiek administrator mógł to przekonfigurować.

Aby skonfigurować edytor systemowy w shellu Bourne'a, trzeba wpisać komendę:

     EDITOR=program ; export EDITOR
natomiast w shellu C:
     setenv EDITOR program
W obu przypadkach "program" jest nazwą wybranego przez nas edytora, np. joe. W obu też przypadkach (jak zresztą wszędzie w Unixie) należy przestrzegać użycia dużych i małych liter. Skonfigurowany w ten sposób edytor pamiętany jest tylko do zakończenia sesji komendą logout; w następnej sesji powyższe komendy trzeba będzie powtórzyć, chyba że wpiszemy je do plików startowych (w shellu Bourne'a - plik .profile; w shellu C - plik .login) - ale to już wykracza poza zakres tego artykułu.

Filtrujemy pocztę

Kolejnym popularnym zastosowaniem pliku .forward jest umieszczanie w nim wywołań programów filtrujących przychodzącą pocztę. Warto zauważyć, że choć funkcje filtrowania są obecnie dostępne w licznych programach klientów poczty działających na PC (np. Microsoft Outlook Express), filtrowanie poprzez plik .forward ma w stosunku do nich jedną istotną zaletę: odbywa się bezpośrednio na serwerze w chwili przyjścia listu. Niechciane listy zatem w ogóle nie znajdą się w naszej skrzynce pocztowej i nie będziemy musieli ich ściągać z serwera, co jest nieuniknione przy filtrowaniu na poziomie klienta.

Na bardzo wielu serwerach Unixowych zainstalowany jest popularny program pocztowy elm. W skład tego pakietu wchodzi również prosty program do filtrowania przychodzącej poczty o nazwie filter. Łatwo możemy przekonać się, czy jest on zainstalowany; wpiszmy po zgłoszeniu systemu komendę "filter -r". Jeżeli zobaczymy komunikat w rodzaju:

     filter (Sun Jan 03 16:41:57 1999 raj): Couldn't get rules!
oznacza to, że program jest zainstalowany i możemy z niego korzystać; jeżeli natomiast pojawi się odpowiedź "command not found", oznacza to, że administrator niestety prawdopodobnie nie zainstalował tego programu.

Aby filtrować pocztę za pomocą programu filter, w pliku .forward musimy umieścić następujący wiersz:

     "|/usr/local/bin/filter"
(o ile program filter zainstalowany jest w katalogu /usr/local/bin; miejsce zainstalowania programu można sprawdzić, wydając komendę whereis filter). To jednak nie wszystko - musimy przecież zdefiniować reguły, według których poczta będzie filtrowana! Reguły te powinny znajdować się w pliku o nazwie filter-rules, znajdującym się w podkatalogu .elm (kropka na początku!) naszego katalogu macierzystego. Jeżeli używaliśmy kiedykolwiek wcześniej na naszym koncie programu elm, podkatalog ten powinien być już utworzony; w takim przypadku wystarczy tylko utworzyć plik za pomocą edytora, wpisując np. (jeżeli używamy edytora joe):

     joe .elm/filter-rules
Jeżeli natomiast podkatalog .elm nie istnieje, musimy go wcześniej utworzyć komendą

     mkdir .elm
Reguły filtrowania mają stosunkowo prostą składnię; każda reguła zapisywana jest w osobnym wierszu o postaci

     if (warunek) then akcja
Warunek dotyczyć może zawartości jednego z następujących pól nagłówka listu: "From:", "To:", "Subject:" lub "Sender:", bądź też jego wielkości (liczby wierszy w liście). Spośród możliwych akcji najczęściej wykorzystywaną przez większość użytkowników będzie zapewne "delete". Oto prosty przykład:

     if (subject = "money") then delete
     if (subject = "$$$") then delete
     if (subject = "adult") then delete
     if (from = "bad@guy.com") then delete
     if (lines > 1000) then delete
Powyższa zawartość pliku filter-rules powoduje skasowanie wszystkich listów zawierających w temacie słowa "money" lub ciąg znaków "$$$" - najczęściej są to oferty udziału w pseudograch pieniężnych, działających na zasadzie "piramidy". Kasowane będą również listy z ofertami odwiedzenia serwerów pornograficznych (zawierające w temacie słowo "adult"). Usuniemy również wszelkie listy od pewnego nieprzyjemnego człowieka, który ustawicznie bombarduje nas pocztą, a także listy zbyt duże - większe niż 1000 wierszy (licząc średnio po 60 znaków w wierszu, daje to około 60 KB).

Jest to oczywiście tylko prosty przykład; prawdziwy kształt reguł filtrowania wypracować trzeba w drodze doświadczalnej. W szczególności dobór właściwych "słów kluczowych" (takich jak w powyższym przykładzie "money" czy "adult"), pozwalających usuwać niepożądane listy - spamy, może wymagać wielu prób. Warto zwrócić uwagę na fakt, że występujący w powyższych zapisach znak równości nie oznacza dokładnej równości, lecz występowanie danego tekstu we wskazanym polu nagłówka; przykładowo, aby zadziałał pierwszy warunek, pole "Subject:" nie musi składać się wyłącznie z pojedynczego słowa "money" - wystarczy, że to słowo gdziekolwiek w nim wystąpi. W porównaniach tych utożsamiane są duże i małe litery, a więc "money" zostanie rozpoznane zarówno, gdy jest napisane małymi, jak i dużymi literami.

Oczywiście kasowanie listów nie jest jedyną operacją, jaką w programie filter możemy wykonywać. W powyższym przykładzie np. kasowanie listów dłuższych niż 1000 wierszy nie zawsze musi być wskazane - choć często będą to "śmieci", czasami możemy otrzymać całkowicie "legalny" i użyteczny list o takiej wielkości (ktoś np. może nam przysłać jakiś potrzebny plik). Zamiast kasować, możemy więc takie duże listy przenosić do osobnego pliku na dysku, którego zawartość możemy od czasu do czasu przeglądać pracując interakcyjnie przez telnet (w końcu po coś mamy tego shella, nieprawdaż?), a jeżeli uznamy ją za interesującą, wówczas "ściągniemy" go sobie na lokalny dysk przy pomocy FTP. A więc ostatnią regułę zmieniamy na:

     if (lines > 1000) then save "~/big-mail"
W ten sposób każdy list większy niż 1000 wierszy będzie - zamiast do domyślnej skrzynki pocztowej - zapisywany do pliku (foldera) o nazwie big-mail w naszym macierzystym katalogu. Tego rodzaju reguły mogą być szczególnie wygodne, gdy czytamy pocztę poprzez telnet, za pomocą programów takich jak elm czy pine; wówczas możemy od razu rozsortowywać sobie do oddzielnych folderów pocztę pochodzącą np. od określonych nadawców, z list dyskusyjnych, bądź - gdy na dane konto otrzymujemy poprzez autoforward pocztę z kilku innych kont - adresowaną na określone konta (warto przy tym pamiętać, że elm domyślnie poszukuje folderów z pocztą w podkatalogu bieżącego katalogu o nazwie Mail, zaś pine - w podkatalogu mail). Dla użytkownika ściągającego pocztę przez POP3 możliwość ta jest mniej przydatna, gdyż poza domyślną skrzynką pocztową żadne inne foldery nie są dla serwera POP3 dostępne.

W stosunku do złośliwego człowieka, który bombarduje nas pocztą, będziemy również złośliwi; wszystkie listy od niego będziemy mu odsyłać z powrotem (zauważmy, że dzieje się to całkowicie automatycznie i bez najmniejszej konieczności łączenia naszego domowego komputera z siecią!):

     if (from = "bad@guy.com") then forward "bad@guy.com"
W tym przypadku nie musimy już dopisywać polecenia "delete", gdyż list, w stosunku do którego użyto opcji "forward", nie jest pozostawiany w skrzynce pocztowej. Jeżeli chcielibyśmy przesłać list na inny adres, ale pozostawić jego kopię w skrzynce, zamiast "forward" musielibyśmy użyć polecenia "forwardc". Jeszcze inną akcją, którą możemy wykonywać przy spełnieniu określonego warunku, jest uruchomienie programu - odpowiednimi poleceniami są tutaj "execute" (jeżeli list nie ma być zachowany w skrzynce pocztowej) i "executec" (jeżeli chcemy zachować kopię listu). Przykładowo, możemy uruchamiać program vacation dla wszystkich listów z wyjątkiem listów wysłanych przez kolegów z pracy (którzy i tak wiedzą, że wyjechaliśmy):

     if (from != "@firma.com.pl") then executec "/usr/bin/vacation kowalski"
Użyty w powyższym warunku znak "!=" ma znaczenie przeciwne do znaku równości - oznacza, że dane pole nagłówka (w tym wypadku "From:") nie zawiera tekstu "@firma.com.pl". Można tworzyć również bardziej skomplikowane warunki, łącząc kilka warunków przy pomocy spójnika "and" (ale nie "or"!), tak jak w poniższym przykładzie, kasującym każdy list zawierający w temacie słowo "business", jeżeli został on wysłany z adresu nie zawierającego końcówki ".pl":

     if (subject = "business" and from != ".pl") then delete
Warto pamiętać o tym, że istotna jest kolejność reguł w pliku filter-rules; warunki są bowiem sprawdzane aż do napotkania pierwszego, który będzie spełniony, i wykonywana jest akcja odpowiadająca temu warunkowi (jeżeli nie zostanie znaleziony żaden pasujący warunek, list zostanie w normalny sposób umieszczony w skrzynce pocztowej). Stąd też jeżeli np. reguły z powyższych dwu przykładów zapiszemy w pliku w takiej właśnie kolejności:

     if (from != "@firma.com.pl") then executec "/usr/bin/vacation kowalski"
     if (subject = "business" and from != ".pl") then delete
wówczas druga reguła nigdy nie zostanie wykonana; listy spełniające zapisany w niej warunek spełniają bowiem również warunek z poprzedniej reguły, i wykonana zostanie określona tą regułą akcja, czyli uruchomienie programu vacation. Zamiast zostać skasowane, listy te pozostaną zatem w skrzynce, a w dodatku zostanie na nie wysłana automatyczna odpowiedź. Chcąc uzyskać zamierzony efekt, musimy te reguły zapisać w odwrotnej kolejności.

Język reguł programu filter ma jeszcze więcej możliwości, które dokładnie opisane są w dokumentacji programu. W skład dystrybucji programu elm wchodzi plik tekstowy - najczęściej noszący nazwę Filter.fmtd - zawierający dokładny podręcznik korzystania z programu filter (The Elm Filter Guide). Najlepiej zapytać administratora systemu o to, czy i w jakim katalogu zainstalował ten plik na komputerze, na którym mamy konto.

Program filter rejestruje wszystkie operacje, które wykonuje na nadchodzącej poczcie, umożliwiając nam po zalogowaniu się na konto zapoznanie się z efektami jego pracy. Użycie komendy "filter -s" wypisuje krótkie podsumowanie, informujące o tym, ile otrzymaliśmy listów, oraz ile spośród nich zostało obsłużonych przez poszczególne reguły z pliku filter-rules. Natomiast komenda "filter -S" (duża litera) wypisuje szczegółowy raport, co program filter zrobił z każdym kolejnym listem (wykaz wyświetlany przez tę komendę może być dość długi...). Dodając do którejkolwiek z tych komend jeszcze parametr "-c" nakazujemy po wyświetleniu raportu "wyczyszczenie" przez program filter plików, w których rejestrowane są te informacje, i rozpoczęcie tym samym tworzenia rejestru od nowa.

To tyle w pierwszej części tekstu opisującego możliwości manipulowania przychodzącą pocztą. W następnej części przeczytacie Państwo więcej o bezsprzecznym "numerze jeden" wśród wszystkich narzędzi do przetwarzania i filtrowania poczty - programie procmail.


Jarosław Rafa 1999. Tekst udostępniony na licencji Creative Commons (uznanie autorstwa - użycie niekomercyjne - bez utworów zależnych). Kliknij tutaj, aby dowiedzieć się, co to oznacza i co możesz z tym tekstem zrobić. W razie jakichkolwiek wątpliwości licencyjnych bądź w celu uzyskania zgody na rozpowszechnianie wykraczające poza warunki licencji proszę o kontakt e-mailem: raj@ap.krakow.pl.

Wersja HTML opracowana 8.02.98.


Powrót do wykazu artykułów o Internecie Statystyka