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ő levél.
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 "számla" szót tartalmazó levelek a Számlák mappába kerülnek, a hírlevelek 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 a levél 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 be van zárva. A laptopja akár ki is lehet kapcsolva. A telefonja azonnal 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 ott maradnak, ahol vannak. Ha ma hoz létre egy szűrőt, a régi leveleket Önnek kell áthelyeznie.
- A szűrők egy postafiókra vonatkoznak. Minden postafióknak saját szűrői vannak. Ha a domainje összes postafiókjára szeretne valamit beállítani, például letiltani egy feladót, azt a tárhelye kezelőpaneljén teheti meg.
A szűrők Sieve nyelven készülnek. Ez egy egyszerű, kifejezetten levelek szűrésére kidolgozott nyelv (RFC 5228). A WebOké levelezőszervere a Dovecotot használja a Pigeonhole-lal, amely 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 szervernek. Ö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 webmailben szabályoknak is neveznek. Minden szűrőnek van:
- egy neve, csak az Ön számára;
- egy hatóköre: a levélnek meg kell felelnie az összes szabálynak vagy valamelyik szabálynak, vagy a szűrő minden levélre 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 * (nulla vagy több karakter) és ? (pontosan egy karakter) jelekkel |
A kis- és nagybetűk egyik esetben sem számítanak. A Sieve alapértelmezetten az i;ascii-casemap szabállyal hasonlít össze, amely a kis- és nagybetűket egyformán kezeli. A "számla" tehát a "SZÁMLA" és a "Számla" alakot is megtalálja.
Így néz ki egy szűrőkészlet
A webmailben a szűrőkészletet szövegként is megtekintheti: Üzenetszűrők > Műveletek > Szűrőkészlet beállítás. Egy példa úgy, ahogy a webmail megírja:
require ["fileinto"];
# rule:[Hírlevelek]
if exists "List-Id"
{
fileinto "Hírlevelek";
stop;
}
# rule:[Számlák]
if allof (header :contains "subject" "számla")
{
fileinto "Számlák";
}
# rule:[Kolléga Bence]
if false # header :contains "from" "bence@example.com"
{
fileinto "INBOX.Csapat";
}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:[Hírlevelek]egy megjegyzés. Ebből ismeri fel a webmail a szűrő nevét. A szerver átugorja ezt a sort. - Az
if exists "List-Id"a feltétel: a levélnek van List-Id fejléce. A hírleveleknek és a levelezőlistáknak van ilyen (RFC 2919). - A
fileinto "Hírlevelek";áthelyezi a levelet a Hírlevelek mappába. A mappa neve a szerveren használt teljes név, ponttal mint elválasztó karakterrel (5.1. lecke). Az Érkezettek alatti mappa neve tehátINBOX.Csapat. - A
stop;leállítja az egész szkriptet. A további szűrők már nem vizsgálják ezt a levelet. A webmailben ennek a műveletnek a neve Műveletek végrehajtásának befejezése. - Az
if false # ...egy kikapcsolt szűrő. Ha kikapcsolja a Szűrő engedélyezve beállítást, a webmail a feltételtfalseértékre cseréli: 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 a levél 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, a levél egyszerűen az Érkezettek mappába kerül.
2. Áthelyezés után a levél nincs ott az Érkezettek mappában is. A fileinto kikapcsolja az implicit megtartást. A levél a kiválasztott mappába kerül, és nem kerül mellette az Érkezettek mappába is. Ha mindkét helyen szeretné látni, használja az Üzenet másolása műveletet.
3. Stop nélkül a következő szűrők is megvizsgálják a levelet. Ha nincs stop, a szerver a következő szűrővel folytatja. Ha az a szűrő is illik, a szerver annak a műveletét is végrehajtja. Két áthelyezés két mappába azt jelenti, hogy a levél 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 Hírlevelek a Számlák felett áll, stoppal. Egy hírlevél, amelynek tárgyában "Az Ön számlája" szerepel, tehát a Hírlevelek mappába kerül, és nem a Számlák mappába. Ha megfordítja a sorrendet, ugyanez a hírlevél a Számlák mappába kerül, mert annak a szűrőnek nincs stopja, és most az kerül sorra először. A hírlevél ekkor ráadásul mindkét mappában ott lenne. Ezért a legspecifikusabb szűrőket tegye a lista elejére, és adjon nekik stopot.
Egy levél végigkövetése: így jósolhatja meg
Vegyen egy levelet, és kövesse végig a szkriptet úgy, ahogy a szerver teszi:
- Kezdje az első szűrőnél. 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 ott van a
stop, végzett. - 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 a levelet, akkor az az Érkezettek mappában van (
INBOX).
Ezzel az öt lépéssel bármilyen szkriptet el tud 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, ahogy 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 webmailekben hasonlóan működik: a Gmailben szűrők, az Outlook.comban 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 be van zárva, és csak az új levelekre.
- A webmail Sieve-szkriptként (RFC 5228) írja meg a szűrőit, és a ManageSieve protokollal juttatja fel a szerverre.
- A tartalmazza, a megegyezik és a kifejezéssel egyezők alapértelmezetten nem különbözteti meg a kis- és nagybetűket.
- Ha egyetlen szűrő sem csinál semmit, a levél az Érkezettek mappában marad; áthelyezés után nincs ott az Érkezettek mappában is.
- A szűrők fentről lefelé futnak; a stop befejezi a szkriptet, ezért 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 írt szűrőkészlet, valamint a berichten-1.txt fájlt, amely négy beérkező levél fejléceit tartalmazza 1-től 4-ig számozva. Kövesse végig az egyes leveleket a lecke öt lépése szerint: fentről lefelé, a kikapcsolt szűrőket átugorva, a stopra figyelve. Minden levélnél adja meg annak a mappának a nevét, ahová a levél kerül, pontosan úgy, ahogy a szkriptben szerepel; ha a levél az Érkezettek mappába kerül, írja be: INBOX. A program összeveti a négy válaszát a megoldókulccsal, és minden levélné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 webmailekben 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 nyelven): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (angol nyelven): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (angol nyelven): https://www.rfc-editor.org/rfc/rfc2919
- Szűrők megtekintése, letöltése és visszaállítása Sieve-szkriptként
