Modul 6 · 6.1
Kako funkcioniraju filtri
Modul 6: Automatski: filtri i odsutnost · Vrijeme čitanja: 10 min
Cilj učenja: Nakon ove lekcije moći ćete objasniti gdje i kada se filtri izvode, pročitati skriptu filtra u jeziku Sieve i predvidjeti u koju će mapu stići dolazna poruka.
Ključni pojmovi: filtar, Sieve, ManageSieve, skup filtera, pravilo, uvjet, radnja, implicitno zadržavanje, stop, sadrži, jednako je, odgovara izrazu
Filtri se izvode na poslužitelju
Filtar automatski razvrstava Vašu poštu: poruke s riječi "factuur" (račun) u naslovu idu u mapu Facturen (Računi), bilteni u zasebnu mapu. Najvažnije je znati sljedeće: to se razvrstavanje ne događa u webmailu, nego na poslužitelju e-pošte, u trenutku kad se poruka isporučuje u Vaš poštanski sandučić.
Iz toga proizlaze tri stvari:
- Filtri rade i kad je webmail zatvoren. Vaše prijenosno računalo može biti isključeno. Telefon odmah vidi poruku u pravoj mapi.
- Filtri rade samo na novoj pošti. Poruke koje su već u Vašem poštanskom sandučiću ostaju gdje jesu. Ako danas izradite filtar, stare poruke premjestite sami.
- Filtri vrijede za jedan poštanski sandučić. Svaki poštanski sandučić ima vlastite filtre. Želite li nešto urediti za sve poštanske sandučiće svoje domene, primjerice blokirati pošiljatelja, to činite na upravljačkoj ploči svog hostinga.
Filtri su napisani u jeziku Sieve, jednostavnom jeziku namijenjenom upravo filtriranju e-pošte (RFC 5228). Poslužitelj e-pošte u WebOkéu koristi Dovecot s Pigeonholeom, Dovecotovom implementacijom jezika Sieve. Webmail Vaše odabire u obrascu pretvara u Sieve skriptu i šalje je na poslužitelj putem protokola ManageSieve (RFC 5804). Ne morate sami pisati Sieve, ali tko ga zna čitati, točno razumije što njegovi filtri rade.
Skup filtera, pravila, uvjeti i radnje
Skup filtera je cjelokupna skripta: svi filtri Vašeg poštanskog sandučića u jednoj datoteci. Možete imati više skupova filtera, ali uvijek je aktivan samo jedan.
U skupu filtera nalaze se filtri, koji se u webmailu nazivaju i pravilima. Svaki filtar ima:
- naziv, samo za Vas;
- opseg: poruka mora ispunjavati sva pravila, jedno od pravila, ili filtar vrijedi za sve poruke;
- jedan ili više uvjeta: gdje filtar gleda (naslov, pošiljatelj, neko drugo zaglavlje), kako uspoređuje i s kojim tekstom;
- jednu ili više radnji: što se događa kad su uvjeti ispunjeni.
Za uspoređivanje postoje tri načina:
| U webmailu | U jeziku Sieve | Značenje |
|---|---|---|
| sadrži | :contains | tekst se nalazi negdje u zaglavlju |
| jednako je | :is | zaglavlje je točno taj tekst |
| odgovara izrazu | :matches | uzorak sa * (nula ili više znakova) i ? (točno jedan znak) |
Velika slova ni u jednom od tih triju načina nisu važna. Sieve prema zadanim postavkama uspoređuje pravilom i;ascii-casemap, koje velika i mala slova tretira jednako. "factuur" stoga pronalazi i "FACTUUR" i "Factuur".
Ovako izgleda skup filtera
U webmailu skup filtera možete pogledati kao tekst putem Filteri > Radnje > Uredi skup filtera. Primjer onako kako ga zapisuje webmail:
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";
}Redak po redak:
require ["fileinto"];traži od poslužitelja proširenje potrebno za premještanje u mapu. Webmail to sam stavlja na vrh, sa svim proširenjima koja skripta koristi.# rule:[Nieuwsbrieven]je komentar. Po njemu webmail prepoznaje naziv Vašeg filtra. Poslužitelj taj redak preskače.if exists "List-Id"je uvjet: poruka ima zaglavlje List-Id. Bilteni i popisi za slanje e-pošte imaju ga (RFC 2919).fileinto "Nieuwsbrieven";premješta poruku u mapu Nieuwsbrieven (Bilteni). Naziv mape je puni naziv na poslužitelju, s točkom kao razdjelnikom (lekcija 5.1). Mapa ispod mape Pristigla pošta stoga se zoveINBOX.Team.stop;zaustavlja cijelu skriptu. Sljedeći filtri više ne gledaju ovu poruku. U webmailu se ta radnja zove Prekini izvođenje filtera.if false # ...je isključeni filtar. Ako isključite Filter uključen, webmail od uvjeta napravifalse: nikad istinito. Stari uvjet ostaje kao komentar, tako da ga kasnije možete ponovno uključiti.

Odozgo prema dolje
Poslužitelj čita skriptu odozgo prema dolje i pregledava svaki filtar. Pritom vrijede tri pravila.
1. Bez radnje poruka ostaje u mapi Pristigla pošta. Sieve poznaje implicitno zadržavanje (implicit keep, RFC 5228, odjeljak 2.10.2): ako nijedan filtar ništa ne učini, poruka jednostavno stiže u Pristiglu poštu.
2. Nakon premještanja poruka nije usto i u mapi Pristigla pošta. Naredba fileinto isključuje implicitno zadržavanje. Poruka stiže u odabranu mapu, a ne usto i u Pristiglu poštu. Ako želite oboje, upotrijebite Kopiraju poruku u.
3. Bez naredbe stop gledaju i sljedeći filtri. Ako nedostaje stop, poslužitelj nastavlja sa sljedećim filtrom. Ako i taj filtar odgovara, poslužitelj izvodi i njegovu radnju. Dva premještanja u dvije mape znače da poruka stiže u obje mape. Uz stop odlučuje prvi filtar koji odgovara.
Zato je redoslijed važan. U gornjem primjeru Nieuwsbrieven stoji iznad Facturen, s naredbom stop. Bilten s "Je factuur" (Vaš račun) u naslovu stoga ide u Nieuwsbrieven, a ne u Facturen. Ako obrnete redoslijed, taj isti bilten završava u Facturen, jer taj filtar nema stop i sada je prvi. Bilten bi tada bio čak u objema mapama. Stoga najspecifičnije filtre stavite na vrh i dodijelite im stop.
Prolazak kroz poruku: ovako to predviđate
Uzmite poruku i prođite kroz skriptu onako kako to čini poslužitelj:
- Počnite od prvog filtra. Je li isključen (
if false)? Preskočite ga. - Je li uvjet ispunjen? Pažljivo pogledajte zaglavlje:
subjectje naslov,frompošiljatelj s imenom i adresom,toprimatelj. - Ako jest: izvedite radnje. Ako piše
stop, gotovi ste. - Ako nije, ili nema naredbe stop: prijeđite na sljedeći filtar.
- Na kraju: ako nijedan filtar nije premjestio ni izbrisao poruku, ona se nalazi u Pristigloj pošti (
INBOX).
S ovih pet koraka možete pročitati svaku skriptu, čak i kad je duga.
U praksi: ovako to funkcionira u webmailu
Filtre ćete pronaći pod Postavke > Filteri. Popis prikazuje Vaše filtre redoslijedom kojim ih poslužitelj izvodi; povlačenjem mijenjate redoslijed. Pod Radnje nalazi se Uredi skup filtera: ondje vidite i mijenjate skriptu kao tekst. Koraci za novi filtar opisani su u priručniku za Roundcube, u odjeljku Izrada filtra. U drugim webmailovima funkcionira slično: Gmail ima filtre, Outlook.com pravila. Oni ne koriste Sieve, ali i ondje vrijede redoslijed i zaustavljanje.
Sažetak
- Filtri se izvode na poslužitelju e-pošte pri isporuci, dakle i kad je webmail zatvoren, i samo na novoj pošti.
- Webmail Vaše filtre zapisuje kao Sieve skriptu (RFC 5228) i postavlja je na poslužitelj putem protokola ManageSieve.
- Sadrži, jednako je i odgovara izrazu prema zadanim postavkama ne razlikuju velika i mala slova.
- Ako nijedan filtar ništa ne učini, poruka ostaje u Pristigloj pošti; nakon premještanja nije usto i u Pristigloj pošti.
- Filtri se izvode odozgo prema dolje; stop završava skriptu, pa redoslijed određuje ishod.
Kviz
Zadatak
Zadatak A6.1: Gdje će ova poruka završiti? Otvorite materijal filters-1.txt, skup filtera onako kako ga zapisuje webmail, i berichten-1.txt, sa zaglavljima četiriju dolaznih poruka, označenih brojevima od 1 do 4. Prođite kroz svaku poruku prema pet koraka iz ove lekcije: odozgo prema dolje, preskačući isključene filtre i pazeći na stop. Za svaku poruku upišite naziv mape u koju stiže, točno onako kako stoji u skripti; ako poruka stiže u Pristiglu poštu, upišite INBOX. Program uspoređuje Vaša četiri odgovora s ključem odgovora i za svaku poruku prikazuje koji je filtar bio presudan.
Daljnje čitanje
Gdje su navedeni koraci u webmailu, oni vrijede za webmail WebOkéa; u drugim webmailovima funkcionira slično.
- Roundcube Webmail 7.1: Izrada filtera
- Roundcube Webmail 7.2: Primjeri korisnih filtara
- Pravila za e-poštu na poslužitelju (filtri na poslužitelju)
- RFC 5228, Sieve: An Email Filtering Language (na engleskom): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (na engleskom): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (na engleskom): https://www.rfc-editor.org/rfc/rfc2919
