procmail to program filtrujący pocztę na serwerze, umożliwiający jej automatyczne sortowanie regułami.
Procmail jako filtr poczty na systemach Unix
Procmail jest programem uruchamianym po stronie serwera Unix lub Linux, którego zadaniem jest przetwarzanie wiadomości dostarczanych do lokalnej skrzynki użytkownika. Nie jest klientem pocztowym i nie służy do komponowania ani wyświetlania wiadomości. Otrzymuje wiadomość na standardowym wejściu, analizuje jej nagłówki oraz treść, a następnie wykonuje reguły zapisane w pliku konfiguracyjnym, zwykle ~/.procmailrc. W zależności od dopasowania może zapisać wiadomość do pliku lub katalogu, przekazać ją do innego programu albo pozostawić do domyślnego dostarczenia.
Konfiguracja procmail opiera się na zmiennych środowiskowych i tak zwanych receptach, czyli blokach reguł rozpoczynających się od linii :0. Często używane zmienne to MAILDIR, określająca katalog roboczy użytkownika, DEFAULT, wskazująca domyślny plik lub katalog dostarczenia, oraz LOGFILE, określająca plik dziennika. Wartości ścieżek zależą od konkretnej konfiguracji systemu, dlatego nie należy bezpośrednio zakładać, że każda instalacja używa tych samych katalogów.
Budowa recept i dopasowanie wiadomości
Po nagłówku :0 procmail może zawierać jedną lub więcej linii warunków. Warunek zaczynający się od gwiazdki, na przykład * ^From:.*example\.org, jest wyrażeniem regularnym sprawdzanym względem wiadomości. Domyślnie testowane są nagłówki, a użycie flagi B pozwala odwoływać się do treści wiadomości. Flaga H oznacza sprawdzanie nagłówków, natomiast D powoduje rozróżnianie wielkości liter podczas dopasowania. Bez tej flagi dopasowanie jest domyślnie niewrażliwe na wielkość liter.
Po warunkach znajduje się akcja. Zapis ścieżki, taki jak spam lub spam/, oznacza dostarczenie wiadomości odpowiednio do pliku albo do katalogu typu Maildir, zależnie od zastosowanego formatu. Znak wykrzyknika pozwala przekazać wiadomość na inny adres, a znak pionowej kreski uruchamia program, do którego procmail przekazuje dane na standardowym wejściu. Przykładowo recepta :0 c z akcją programu może utworzyć kopię wiadomości, ponieważ flaga c nakazuje kontynuowanie przetwarzania na kopii. Kolejność recept ma znaczenie: po pomyślnym dostarczeniu procmail zwykle kończy przetwarzanie, chyba że użyto odpowiedniej flagi lub akcja nie zakończyła się dostarczeniem.
Pliki, blokady i bezpieczne dostarczanie
Procmail został zaprojektowany do pracy z lokalnym dostarczaniem poczty, dlatego istotne są mechanizmy blokowania plików. Przy zapisie do wspólnego pliku mbox jednoczesne uruchomienie kilku procesów mogłoby doprowadzić do przeplatania danych. Recepta może używać lokalnej blokady, a zmienna LOCKFILE pozwala wskazać plik blokady stosowany w określonym zakresie konfiguracji. W pakiecie procmail znajdują się również narzędzia pomocnicze, między innymi lockfile do tworzenia blokad oraz formail do przetwarzania nagłówków i formatowania wiadomości.
W praktyce trzeba rozróżniać zwykły plik mbox od Maildir. Mbox przechowuje wiele wiadomości w jednym pliku, natomiast Maildir używa katalogów tmp, new i cur, dzięki czemu pojedyncza wiadomość jest osobnym plikiem. Nieprawidłowa ścieżka, brak praw zapisu, błędnie ustawione MAILDIR albo niezgodny format skrzynki mogą spowodować, że filtr nie dostarczy poczty tam, gdzie oczekuje administrator. Dziennik określony przez LOGFILE pomaga ustalić, która recepta została wykonana, ale sam wpis w logu nie zastępuje sprawdzenia rzeczywistej zawartości skrzynki.
Kontrola działania i diagnozowanie reguł procmail
Analizę problemu z procmail rozpoczyna się od sprawdzenia, czy program jest rzeczywiście wywoływany przez lokalny mechanizm dostarczania poczty. Następnie należy zweryfikować właściciela i prawa pliku ~/.procmailrc, wartości zmiennych środowiskowych oraz ścieżki użyte w akcjach. Błąd składni lub niepoprawnie zapisane wyrażenie regularne może zmienić wynik dopasowania, dlatego reguły powinny być testowane na kopiach wiadomości zawierających różne nagłówki, w tym wielokrotne pola Received, zakodowane tematy oraz wiadomości bez oczekiwanego nagłówka.
Przy diagnozie należy także sprawdzić kody zakończenia programów uruchamianych przez akcję z pionową kreską. Flagi w i W wpływają na sposób traktowania statusu programu, a flaga c zmienia przepływ dalszego przetwarzania. Szczególnej uwagi wymaga używanie recept przekazujących pocztę do poleceń powłoki, ponieważ błędne cytowanie, niewłaściwe ścieżki lub nieprzewidziane dane w nagłówkach mogą wywołać awarie przetwarzania. W środowisku serwisowym diagnostyka obejmuje więc zarówno samą składnię pliku konfiguracyjnego, jak i końcowy stan plików mbox lub katalogów Maildir oraz wpisy w logach systemowych.