Moodul 6 · 6.1
Kuidas filtrid töötavad
Moodul 6: Automaatika: filtrid ja eemalolek · Lugemisaeg: 10 minutit
Õpieesmärk: Pärast seda õppetundi oskad selgitada, kus ja millal filtrid töötavad, lugeda Sieve'i filtriskripti ja ennustada, millisesse kausta saabuv kiri jõuab.
Põhimõisted: filter, Sieve, ManageSieve, filtrite kogum, reegel, tingimus, tegevus, kaudne säilitamine, stop, sisaldab, on võrdne kui, vastab avaldisele
Filtrid töötavad serveris
Filter sorteerib su kirjad automaatselt: kirjad, mille pealkirjas on "factuur", lähevad kausta Facturen (arved), uudiskirjad omaette kausta. Kõige olulisem teada: sorteerimine ei toimu veebimeilis, vaid meiliserveris, sel hetkel, kui kiri sinu postkasti toimetatakse.
Sellest tuleneb kolm asja:
- Filtrid töötavad ka siis, kui veebimeil on suletud. Sülearvuti võib olla välja lülitatud. Telefon näeb kirja kohe õiges kaustas.
- Filtrid töötavad ainult uute kirjadega. Kirjad, mis on juba su postkastis, jäävad sinna, kus nad on. Kui teed täna filtri, tõsta vanad kirjad ise ümber.
- Filtrid kehtivad ühele postkastile. Igal postkastil on oma filtrid. Kui tahad midagi korraldada kõigile oma domeeni postkastidele, näiteks saatja blokeerida, tee seda oma majutuse halduspaneelis.
Filtrid on kirjutatud keeles Sieve, mis on lihtne keel spetsiaalselt kirjade filtreerimiseks (RFC 5228). WebOké meiliserver kasutab Dovecoti koos Pigeonhole'iga, mis on Dovecoti Sieve'i teostus. Veebimeil teisendab sinu valikud vormis Sieve'i skriptiks ja saadab selle protokolli ManageSieve (RFC 5804) kaudu serverisse. Sa ei pea Sieve'i kirjutama, aga kes oskab seda lugeda, saab täpselt aru, mida tema filtrid teevad.
Filtrite kogum, reeglid, tingimused ja tegevused
Filtrite kogum on kogu skript: kõik su postkasti filtrid ühes failis. Filtrite kogumeid võib olla mitu, aga aktiivne on alati ainult üks.
Filtrite kogumis on filtrid, mida veebimeilis nimetatakse ka reegliteks. Igal filtril on:
- nimi, ainult sinu enda jaoks;
- ulatus: kiri peab vastama kõigile reeglitele, ühele reeglitest või kehtib filter kõigile kirjadele;
- üks või mitu tingimust: kuhu filter vaatab (pealkiri, saatja, mõni muu päis), kuidas see võrdleb ja millise tekstiga;
- üks või mitu tegevust: mis juhtub, kui tingimused on täidetud.
Võrdlemiseks on kolm viisi:
| Veebimeilis | Sieve'is | Tähendus |
|---|---|---|
| sisaldab | :contains | tekst on kuskil päises |
| on võrdne kui | :is | päis on täpselt see tekst |
| vastab avaldisele | :matches | muster, kus * (null või rohkem märki) ja ? (täpselt üks märk) |
Suurtähed ei loe ühegi neist kolmest puhul. Sieve võrdleb vaikimisi reegliga i;ascii-casemap, mis käsitleb suur- ja väiketähti ühtmoodi. "factuur" leiab seega ka "FACTUUR" ja "Factuur".
Nii näeb filtrite kogum välja
Veebimeilis saad filtrite kogumit tekstina vaadata valikuga Filtrid > Tegevused > Muuda filtrite kogumit. Näide sellest, kuidas veebimeil selle kirjutab:
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";
}Rida rea haaval:
require ["fileinto"];küsib serverilt laiendust, mida on vaja kausta teisaldamiseks. Veebimeil lisab selle ise üles, koos kõigi laiendustega, mida skript kasutab.# rule:[Nieuwsbrieven]on kommentaar. Selle järgi tunneb veebimeil ära sinu filtri nime. Server jätab selle rea vahele.if exists "List-Id"on tingimus: kirjal on päis List-Id. Uudiskirjadel ja meililistidel on see olemas (RFC 2919).fileinto "Nieuwsbrieven";teisaldab kirja kausta Nieuwsbrieven (uudiskirjad). Kausta nimi on täisnimi serveris, eraldajaks punkt (õppetund 5.1). Kaust, mis asub kausta Saabuvad all, kannab seega nimeINBOX.Team.stop;peatab kogu skripti. Järgmised filtrid seda kirja enam ei vaata. Veebimeilis on selle tegevuse nimi Peata reeglite otsimine.if false # ...on välja lülitatud filter. Kui lülitad valiku Filter lubatud välja, teeb veebimeil tingimusestfalse: mitte kunagi tõene. Vana tingimus jääb kommentaarina alles, et saaksid selle hiljem uuesti sisse lülitada.

Ülevalt alla
Server loeb skripti ülevalt alla ja vaatab iga filtri läbi. Seejuures kehtib kolm reeglit.
1. Kui tegevust pole, jääb kiri kausta Saabuvad. Sieve'is on olemas kaudne säilitamine (implicit keep, RFC 5228, jaotis 2.10.2): kui ükski filter midagi ei tee, jõuab kiri tavapäraselt kausta Saabuvad.
2. Pärast teisaldamist ei ole kiri lisaks veel kaustas Saabuvad. fileinto lülitab kaudse säilitamise välja. Kiri läheb valitud kausta ja mitte lisaks kausta Saabuvad. Kui tahad mõlemat, kasuta valikut Kopeeri kiri.
3. Ilma stopita vaatavad ka järgmised filtrid. Kui stop puudub, jätkab server järgmise filtriga. Kui ka see filter sobib, teeb server ka selle tegevuse. Kaks teisaldamist kahte kausta tähendab, et kiri jõuab mõlemasse kausta. stop korral otsustab esimene sobiv filter.
Seepärast on järjekord oluline. Ülaltoodud näites on Nieuwsbrieven enne Facturen, koos stopiga. Uudiskiri, mille pealkirjas on "Je factuur", läheb seega kausta Nieuwsbrieven, mitte kausta Facturen. Kui pöörad järjekorra ümber, jõuab sama uudiskiri kausta Facturen, sest sellel filtril pole stoppi ja see tuleb nüüd esimesena. Uudiskiri oleks siis koguni mõlemas kaustas. Pane seega kõige täpsemad filtrid kõige üles ja lisa neile stop.
Kiri läbi skripti: nii ennustad tulemust
Võta üks kiri ja käi skript läbi nii, nagu server seda teeb:
- Alusta esimesest filtrist. Kas see on välja lülitatud (
if false)? Jäta see vahele. - Kas tingimus on täidetud? Vaata päist täpselt:
subjecton pealkiri,fromsaatja koos nime ja aadressiga,tosaaja. - Kui jah: tee tegevused. Kui seal on
stop, oled valmis. - Kui ei, või stoppi pole: mine järgmise filtri juurde.
- Lõpus: kui ükski filter kirja ei teisaldanud ega kustutanud, on see kaustas Saabuvad (
INBOX).
Nende viie sammuga saad lugeda iga skripti, ka pikka.
Praktikas: nii töötab see veebimeilis
Filtrid leiad valikust Seaded > Filtrid. Loend näitab su filtreid selles järjekorras, milles server neid täidab; järjekorra muutmiseks lohista neid. Menüüs Tegevused on Muuda filtrite kogumit: seal näed ja muudad skripti tekstina. Uue filtri loomise sammud leiad Roundcube'i juhendist jaotisest Filtri loomine. Teistes veebimeilides töötab see sarnaselt: Gmailis on filtrid, Outlook.com'is reeglid. Need ei kasuta Sieve'i, aga ka seal on järjekord ja peatamine olulised.
Kokkuvõte
- Filtrid töötavad meiliserveris kirja kohaletoimetamisel, seega ka siis, kui veebimeil on suletud, ja ainult uute kirjadega.
- Veebimeil kirjutab su filtrid Sieve'i skriptina (RFC 5228) ja paneb selle ManageSieve'i kaudu serverisse.
- Sisaldab, on võrdne kui ja vastab avaldisele ei tee vaikimisi suur- ja väiketähtedel vahet.
- Kui ükski filter midagi ei tee, jääb kiri kausta Saabuvad; pärast teisaldamist ei ole see lisaks kaustas Saabuvad.
- Filtrid töötavad ülevalt alla; stop lõpetab skripti, seega määrab järjekord tulemuse.
Test (quiz)
Ülesanne
Ülesanne A6.1: Kuhu see kiri jõuab? Ava materjal filters-1.txt, mis on filtrite kogum sellisel kujul, nagu veebimeil selle kirjutab, ja berichten-1.txt, kus on nelja saabuva kirja päised, nummerdatud 1 kuni 4. Käi iga kiri läbi selle õppetunni viie sammu järgi: ülevalt alla, välja lülitatud filtrid vahele jättes ja stoppi silmas pidades. Kirjuta iga kirja juurde kausta nimi, kuhu see jõuab, täpselt nii, nagu see skriptis on; kui kiri jõuab kausta Saabuvad, kirjuta INBOX. Programm võrdleb sinu nelja vastust vastuste võtmega ja näitab iga kirja juures, milline filter otsustas.
Lisalugemist
Kui veebimeili samme kirjeldatakse, kehtivad need WebOké veebimeilile; teistes veebimeilides töötab see sarnaselt.
- Roundcube Webmail 7.1: Filtri loomine
- Roundcube Webmail 7.2: Kasulike filtrite näited
- Serveripoolsed e-posti reeglid (filtrid serveris)
- RFC 5228, Sieve: An Email Filtering Language (inglise keeles): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (inglise keeles): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (inglise keeles): https://www.rfc-editor.org/rfc/rfc2919
