Modul 6 · 6.1
Így működnek a szűrők
Modul 6: Automatikusan: szűrők és távollét · Olvasási idő: 10 perc
Tanulási cél: A lecke után el tudja magyarázni, hol és mikor futnak a szűrők, el tud olvasni egy Sieve nyelvű szűrőszkriptet, és meg tudja jósolni, melyik mappába kerül egy beérkező üzenet.
Kulcsfogalmak: szűrő, Sieve, ManageSieve, szűrőkészlet, szabály, feltétel, művelet, implicit megtartás, stop, tartalmazza, megegyezik, kifejezéssel egyezők
A szűrők a szerveren futnak
A szűrő automatikusan rendezi a leveleit: a tárgyában "factuur" (számla) szót tartalmazó levelet a Facturen (Számlák) mappába, a hírleveleket egy külön mappába. A legfontosabb tudnivaló: ez a rendezés nem a webmailben történik, hanem a levelezőszerveren, abban a pillanatban, amikor az üzenet megérkezik a postafiókjába.
Ebből három dolog következik:
- A szűrők akkor is működnek, ha a webmail zárva van. A laptopja lehet kikapcsolva. A telefonja rögtön a megfelelő mappában látja a levelet.
- A szűrők csak az új levelekre hatnak. A postafiókjában már meglévő levelek a helyükön maradnak. Ha ma hoz létre egy szűrőt, a régi üzeneteket Önnek kell áthelyeznie.
- A szűrők egyetlen postafiókra vonatkoznak. Minden postafióknak saját szűrői vannak. Ha a domainje összes postafiókjára szeretne beállítani valamit, például letiltani egy feladót, azt a tárhelye vezérlőpultjában teheti meg.
A szűrők Sieve nyelven készülnek, ez egy kifejezetten levélszűrésre szolgáló egyszerű nyelv (RFC 5228). A WebOké levelezőszervere a Dovecotot használja a Pigeonhole-lal, ami a Dovecot Sieve-megvalósítása. A webmail az űrlapon megadott beállításait Sieve-szkriptté alakítja, és a ManageSieve protokollon (RFC 5804) keresztül elküldi a szerverre. Önnek nem kell Sieve-et írnia, de aki el tudja olvasni, pontosan érti, mit csinálnak a szűrői.
Szűrőkészlet, szabályok, feltételek és műveletek
A szűrőkészlet a teljes szkript: a postafiók összes szűrője egyetlen fájlban. Több szűrőkészlete is lehet, de mindig csak egy aktív.
A szűrőkészletben vannak a szűrők, amelyeket a webmail szabályoknak is nevez. Minden szűrőnek van:
- egy neve, ez csak az Ön tájékozódását szolgálja;
- egy hatóköre: az üzenetnek meg kell felelnie az összes szabálynak, valamelyik szabálynak, vagy a szűrő minden üzenetre vonatkozik;
- egy vagy több feltétele: hol néz a szűrő (tárgy, feladó, egy másik fejléc), hogyan hasonlít össze, és milyen szöveggel;
- egy vagy több művelete: mi történik, ha a feltételek teljesülnek.
Az összehasonlításnak három módja van:
| A webmailben | Sieve-ben | Jelentés |
|---|---|---|
| tartalmazza | :contains | a szöveg valahol szerepel a fejlécben |
| megegyezik | :is | a fejléc pontosan ez a szöveg |
| kifejezéssel egyezők | :matches | minta, amelyben a * nulla vagy több karaktert, a ? pontosan egy karaktert jelöl |
A kis- és nagybetűk egyik esetben sem számítanak. A Sieve alapértelmezés szerint a i;ascii-casemap szabállyal hasonlít össze, amely a kis- és nagybetűket egyformán kezeli. A "factuur" tehát megtalálja a "FACTUUR" és a "Factuur" szót is.
Így néz ki egy szűrőkészlet
A webmailben a szűrőkészletet szövegként is megtekintheti az Üzenetszűrők > Műveletek > Szűrőkészlet beállítás menüpontban. Egy példa, ahogy a webmail megírja:
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";
}Sorról sorra:
- A
require ["fileinto"];azt a bővítményt kéri a szervertől, amely a mappába való áthelyezéshez szükséges. Ezt a webmail maga írja a szkript elejére, a szkript által használt összes bővítménnyel együtt. - A
# rule:[Nieuwsbrieven]egy megjegyzés. Ebből ismeri fel a webmail a szűrő nevét. A szerver átugorja ezt a sort. - A
if exists "List-Id"a feltétel: az üzenetnek van List-Id fejléce. A hírleveleknek és a levelezőlistáknak van ilyen (RFC 2919). - A
fileinto "Nieuwsbrieven";áthelyezi az üzenetet a Nieuwsbrieven (Hírlevelek) mappába. A mappanév a szerveren használt teljes név, elválasztójelként ponttal (5.1. lecke). Az Érkezettek alatti mappa neve tehátINBOX.Team. - A
stop;leállítja a teljes szkriptet. A további szűrők már nem vizsgálják ezt az üzenetet. A webmailben ennek a műveletnek a neve Műveletek végrehajtásának befejezése. - A
if false # ...egy kikapcsolt szűrő. Ha kikapcsolja a Szűrő engedélyezve beállítást, a webmail a feltételbőlfalsefeltételt csinál: ez soha nem igaz. A régi feltétel megjegyzésként megmarad, így később újra bekapcsolhatja.

Fentről lefelé
A szerver fentről lefelé olvassa a szkriptet, és minden szűrőt megvizsgál. Ennek során három szabály érvényes.
1. Művelet nélkül az üzenet az Érkezettek mappában marad. A Sieve ismeri az implicit megtartást (implicit keep, RFC 5228, 2.10.2. szakasz): ha egyetlen szűrő sem csinál semmit, az üzenet egyszerűen az Érkezettek mappába kerül.
2. Áthelyezés után az üzenet nem kerül az Érkezettek mappába is. Egy fileinto kikapcsolja az implicit megtartást. Az üzenet a kiválasztott mappába kerül, mellette pedig nem az Érkezettek mappába. Ha mindkettőt szeretné, használja az Üzenet másolása műveletet.
3. Stop nélkül a következő szűrők is vizsgálnak. Ha hiányzik a stop, a szerver a következő szűrővel folytatja. Ha az a szűrő is illeszkedik, a szerver annak a műveletét is végrehajtja. Két mappába történő két áthelyezés azt jelenti, hogy az üzenet mindkét mappába bekerül. A stop használatával az első illeszkedő szűrő dönt.
Ezért számít a sorrend. A fenti példában a Nieuwsbrieven a Facturen fölött áll, stoppal. Egy olyan hírlevél tehát, amelynek tárgyában "Je factuur" (Az Ön számlája) szerepel, a Nieuwsbrieven mappába kerül, nem a Facturen mappába. Ha megfordítja a sorrendet, ugyanez a hírlevél a Facturen mappába kerül, mert annak a szűrőnek nincs stopja, és most az áll elöl. A hírlevél ekkor ráadásul mindkét mappában megjelenne. Ezért a legspecifikusabb szűrőket tegye legfelülre, és lássa el őket stoppal.
Egy üzenet végigkövetése: így jósolhatja meg
Vegyen egy üzenetet, és kövesse végig a szkriptet úgy, ahogy a szerver teszi:
- Kezdje az első szűrővel. Ki van kapcsolva (
if false)? Ugorja át. - Teljesül a feltétel? Nézze meg pontosan a fejlécet: a
subjecta tárgy, afroma feladó névvel és címmel, atoa címzett. - Ha igen: hajtsa végre a műveleteket. Ha szerepel
stop, készen van. - Ha nem, vagy nincs stop: lépjen a következő szűrőre.
- A végén: ha egyetlen szűrő sem helyezte át vagy törölte az üzenetet, akkor az az Érkezettek mappában van (
INBOX).
Ezzel az öt lépéssel bármelyik szkriptet el tudja olvasni, akkor is, ha hosszú.
A gyakorlatban: így működik a webmailben
A szűrőket a Beállítások > Üzenetszűrők menüpontban találja. A lista abban a sorrendben mutatja a szűrőket, amelyben a szerver végrehajtja őket; a sorrendet húzással módosíthatja. A Műveletek alatt található a Szűrőkészlet beállítás: itt szövegként láthatja és módosíthatja a szkriptet. Az új szűrő létrehozásának lépéseit a Roundcube kézikönyv Szűrő létrehozása részében találja. Más webmailben hasonlóan működik: a Gmailben szűrők, az Outlook.com-ban szabályok vannak. Ezek nem Sieve-et használnak, de ott is számít a sorrend és a leállítás.
Összefoglalás
- A szűrők a levelezőszerveren futnak a kézbesítéskor, tehát akkor is, ha a webmail zárva van, és csak az új levelekre.
- A webmail Sieve-szkriptként (RFC 5228) írja meg a szűrőit, és a ManageSieve segítségével tölti fel a szerverre.
- A tartalmazza, a megegyezik és a kifejezéssel egyezők alapértelmezés szerint nem különbözteti meg a kis- és nagybetűket.
- Ha egyik szűrő sem csinál semmit, az üzenet az Érkezettek mappában marad; áthelyezés után nem kerül az Érkezettek mappába is.
- A szűrők fentről lefelé futnak; a stop befejezi a szkriptet, így a sorrend határozza meg az eredményt.
Kvíz
Feladat
A6.1 feladat: Hová kerül ez a levél? Nyissa meg a filters-1.txt anyagot, amely egy webmail által megírt szűrőkészlet, valamint a berichten-1.txt anyagot, amely négy beérkező üzenet fejléceit tartalmazza, 1-től 4-ig számozva. Kövesse végig az egyes üzeneteket a lecke öt lépése szerint: fentről lefelé, a kikapcsolt szűrőket átugorva, a stopra figyelve. Minden üzenetnél adja meg annak a mappának a nevét, ahová kerül, pontosan úgy, ahogy a szkriptben szerepel; ha az üzenet az Érkezettek mappába kerül, írja be: INBOX. A program összeveti a négy válaszát a megoldókulccsal, és minden üzenetnél megmutatja, melyik szűrő döntött.
Bővebben olvasva
Ahol a webmail lépései szerepelnek, azok a WebOké webmailjére vonatkoznak; más webmailben hasonlóan működik.
- Roundcube Webmail 7.1: Szűrő létrehozása
- Roundcube Webmail 7.2: Példák hasznos szűrőkre
- Szerveroldali e-mail-szabályok (szűrők a szerveren)
- RFC 5228, Sieve: An Email Filtering Language (angol nyelvű): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (angol nyelvű): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (angol nyelvű): https://www.rfc-editor.org/rfc/rfc2919
- Je filters als Sieve-script bekijken, downloaden en terugzetten
