Jak działają filtry
Moduł 6: Automatycznie: filtry i nieobecność · Czas czytania: 10 min
Cel lekcji: Po tej lekcji potrafią Państwo wyjaśnić, gdzie i kiedy działają filtry, przeczytać skrypt filtrów w języku Sieve i przewidzieć, do którego folderu trafi przychodząca wiadomość.
Kluczowe pojęcia: filtr, Sieve, ManageSieve, zbiór filtrów, reguła, warunek, akcja, niejawne zachowanie, stop, zawiera, jest równe, pasuje do wyrażenia
Filtry działają na serwerze
Filtr automatycznie porządkuje Państwa pocztę: wiadomości ze słowem "factuur" (faktura) w temacie trafiają do folderu Facturen (Faktury), newslettery do osobnego folderu. Najważniejsze jest to, że sortowanie nie odbywa się w poczcie internetowej, lecz na serwerze pocztowym, w chwili dostarczenia wiadomości do Państwa skrzynki.
Wynikają z tego trzy rzeczy:
- Filtry działają także wtedy, gdy poczta internetowa jest zamknięta. Laptop może być wyłączony. Telefon od razu widzi wiadomość we właściwym folderze.
- Filtry działają tylko na nową pocztę. Wiadomości, które już są w skrzynce, pozostają tam, gdzie są. Jeśli utworzą Państwo filtr dzisiaj, starsze wiadomości trzeba przenieść samodzielnie.
- Filtry dotyczą jednej skrzynki. Każda skrzynka ma własne filtry. Jeśli chcą Państwo ustawić coś dla wszystkich skrzynek w domenie, na przykład zablokować nadawcę, robi się to w panelu zarządzania hostingiem.
Filtry są zapisane w języku Sieve, prostym języku stworzonym specjalnie do filtrowania poczty (RFC 5228). Serwer pocztowy WebOké korzysta z Dovecot z Pigeonhole, czyli implementacji Sieve dla Dovecot. Poczta internetowa zamienia wybory dokonane w formularzu na skrypt Sieve i wysyła go na serwer za pomocą protokołu ManageSieve (RFC 5804). Nie muszą Państwo pisać w Sieve, ale kto potrafi go czytać, dokładnie rozumie, co robią jego filtry.
Zbiór filtrów, reguły, warunki i akcje
Zbiór filtrów to cały skrypt: wszystkie filtry Państwa skrzynki w jednym pliku. Można mieć kilka zbiorów filtrów, ale aktywny jest zawsze tylko jeden.
W zbiorze filtrów znajdują się filtry, czasem nazywane też regułami. Każdy filtr ma:
- nazwę, wyłącznie dla Państwa;
- zakres: wiadomość musi spełniać wszystkie reguły, jedną z reguł, albo filtr obejmuje wszystkie wiadomości;
- jeden lub więcej warunków: gdzie filtr patrzy (temat, nadawca, inny nagłówek), jak porównuje i z jakim tekstem;
- jedną lub więcej akcji: co się dzieje, gdy warunki są spełnione.
Porównywać można na trzy sposoby:
| W poczcie internetowej | W Sieve | Znaczenie |
|---|---|---|
| zawiera | :contains | tekst występuje gdziekolwiek w nagłówku |
| jest równe | :is | nagłówek to dokładnie ten tekst |
| pasuje do wyrażenia | :matches | wzorzec z * (zero lub więcej znaków) i ? (dokładnie jeden znak) |
We wszystkich trzech przypadkach wielkość liter nie ma znaczenia. Sieve domyślnie porównuje według reguły i;ascii-casemap, która traktuje wielkie i małe litery jednakowo. "factuur" znajdzie więc także "FACTUUR" i "Factuur".
Tak wygląda zbiór filtrów
W poczcie internetowej zbiór filtrów można obejrzeć jako tekst w Filtry > Akcje > Edytuj zbiór filtrów. Przykład w takiej postaci, w jakiej zapisuje go poczta internetowa:
require ["fileinto"];
# rule:[Nieuwsbrieven]
if exists "List-Id"
{
fileinto "Nieuwsbrieven";
stop;
}
# rule:[Facturen]
if allof (header :contains "subject" "factuur")
{
fileinto "Facturen";
}
# rule:[Collega Daan]
if false # header :contains "from" "daan@example.com"
{
fileinto "INBOX.Team";
}Wiersz po wierszu:
require ["fileinto"];prosi serwer o rozszerzenie potrzebne do przenoszenia wiadomości do folderu. Poczta internetowa sama umieszcza ten wiersz na początku, ze wszystkimi rozszerzeniami używanymi w skrypcie.# rule:[Nieuwsbrieven]to komentarz. Dzięki niemu poczta internetowa rozpoznaje nazwę Państwa filtra. Serwer pomija ten wiersz.if exists "List-Id"to warunek: wiadomość ma nagłówek List-Id. Mają go newslettery i listy mailingowe (RFC 2919).fileinto "Nieuwsbrieven";przenosi wiadomość do folderu Nieuwsbrieven (Newslettery). Nazwa folderu to pełna nazwa na serwerze, z kropką jako separatorem (lekcja 5.1). Folder pod Odebrane nazywa się więcINBOX.Team.stop;zatrzymuje cały skrypt. Kolejne filtry nie sprawdzają już tej wiadomości. W poczcie internetowej ta akcja nazywa się Przerwij przetwarzanie reguł.if false # ...to wyłączony filtr. Gdy wyłączą Państwo opcję Filtr włączony, poczta internetowa zamienia warunek nafalse: nigdy nie jest spełniony. Stary warunek zostaje jako komentarz, aby można go było później znów włączyć.

Od góry do dołu
Serwer czyta skrypt od góry do dołu i sprawdza każdy filtr. Obowiązują przy tym trzy zasady.
1. Bez akcji wiadomość zostaje w Odebrane. Sieve zna niejawne zachowanie (implicit keep, RFC 5228, sekcja 2.10.2): jeśli żaden filtr nic nie zrobi, wiadomość po prostu trafia do Odebrane.
2. Po przeniesieniu wiadomość nie znajduje się dodatkowo w Odebrane. Polecenie fileinto wyłącza niejawne zachowanie. Wiadomość trafia do wybranego folderu, a nie dodatkowo do Odebrane. Jeśli chcą Państwo mieć ją w obu miejscach, prosimy użyć akcji Skopiuj wiadomość do.
3. Bez stop kolejne filtry również sprawdzają wiadomość. Jeśli brakuje stop, serwer przechodzi do następnego filtra. Jeśli ten filtr także pasuje, serwer wykonuje również jego akcję. Dwa przeniesienia do dwóch folderów oznaczają, że wiadomość trafi do obu folderów. Z stop decyduje pierwszy pasujący filtr.
Dlatego kolejność ma znaczenie. W powyższym przykładzie Nieuwsbrieven stoi nad Facturen i ma stop. Newsletter z tematem "Je factuur" trafi więc do Nieuwsbrieven, a nie do Facturen. Jeśli odwrócą Państwo kolejność, ten sam newsletter wyląduje w Facturen, bo ten filtr nie ma stop i jest teraz pierwszy. Newsletter znalazłby się wtedy nawet w obu folderach. Dlatego najbardziej szczegółowe filtry prosimy umieszczać na górze i dodawać do nich stop.
Prześledzenie wiadomości: tak można to przewidzieć
Proszę wziąć wiadomość i przejść przez skrypt tak, jak robi to serwer:
- Proszę zacząć od pierwszego filtra. Czy jest wyłączony (
if false)? Proszę go pominąć. - Czy warunek jest spełniony? Proszę dokładnie sprawdzić nagłówek:
subjectto temat,fromnadawca z nazwą i adresem,toodbiorca. - Jeśli tak: proszę wykonać akcje. Jeśli jest
stop, to koniec. - Jeśli nie albo nie ma stop: proszę przejść do następnego filtra.
- Na końcu: jeśli żaden filtr nie przeniósł ani nie usunął wiadomości, znajduje się ona w Odebrane (
INBOX).
Dzięki tym pięciu krokom mogą Państwo przeczytać każdy skrypt, nawet długi.
W praktyce: tak to działa w poczcie internetowej
Filtry znajdą Państwo w Ustawienia > Filtry. Lista pokazuje filtry w kolejności, w jakiej wykonuje je serwer; kolejność zmienia się, przeciągając je. W menu Akcje znajduje się Edytuj zbiór filtrów: tam można zobaczyć i zmienić skrypt jako tekst. Kroki tworzenia nowego filtra opisano w Podręczniku Roundcube w części Tworzenie filtra. W innej poczcie internetowej działa to podobnie: Gmail ma filtry, Outlook.com reguły. Nie używają one Sieve, ale również tam liczą się kolejność i zatrzymanie.
Podsumowanie
- Filtry działają na serwerze pocztowym w chwili dostarczenia, więc także przy zamkniętej poczcie internetowej, i tylko na nową pocztę.
- Poczta internetowa zapisuje Państwa filtry jako skrypt Sieve (RFC 5228) i umieszcza go na serwerze przez ManageSieve.
- Zawiera, jest równe i pasuje do wyrażenia domyślnie nie rozróżniają wielkości liter.
- Jeśli żaden filtr nic nie zrobi, wiadomość zostaje w Odebrane; po przeniesieniu nie ma jej dodatkowo w Odebrane.
- Filtry działają od góry do dołu; stop kończy skrypt, więc kolejność decyduje o wyniku.
Quiz
Zadanie
Zadanie A6.1: Gdzie trafi ta wiadomość? Proszę otworzyć materiał filters-1.txt, zbiór filtrów w postaci, w jakiej zapisuje go poczta internetowa, oraz berichten-1.txt, z nagłówkami czterech przychodzących wiadomości, ponumerowanych od 1 do 4. Proszę prześledzić każdą wiadomość według pięciu kroków z tej lekcji: od góry do dołu, z pominięciem wyłączonych filtrów, z uwagą na stop. Dla każdej wiadomości proszę wpisać nazwę folderu, do którego trafi, dokładnie tak, jak jest zapisana w skrypcie; jeśli wiadomość trafi do Odebrane, proszę wpisać INBOX. Program porówna Państwa cztery odpowiedzi z kluczem odpowiedzi i przy każdej wiadomości pokaże, który filtr przesądził o wyniku.
Dalsza lektura
Opisane kroki w poczcie internetowej dotyczą poczty internetowej WebOké; w innej poczcie internetowej działa to podobnie.
- Roundcube Webmail 7.1: Tworzenie filtra
- Roundcube Webmail 7.2: Przykłady przydatnych filtrów
- Reguły poczty e-mail po stronie serwera (filtry na serwerze)
- RFC 5228, Sieve: An Email Filtering Language (w języku angielskim): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (w języku angielskim): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (w języku angielskim): https://www.rfc-editor.org/rfc/rfc2919
