6. modulis · 6.1
Kā darbojas filtri
6. modulis: Automātiski: filtri un prombūtne · Lasīšanas laiks: 10 minūtes
Mērķis: Pēc šīs nodarbības Jūs varēsiet izskaidrot, kur un kad darbojas filtri, izlasīt filtra skriptu Sieve valodā un paredzēt, kurā mapē nonāks ienākošā vēstule.
Pamatjēdzieni: filtrs, Sieve, ManageSieve, filtru kopa, nosacījums, darbība, netiešā saglabāšana, stop, satur, ir vienāds ar, jāatbilst izteiksmei
Filtri darbojas serverī
Filtrs automātiski sakārto Jūsu e-pastu: vēstules ar "factuur" (rēķins) temata laukā uz mapi Facturen (Rēķini), jaunumu vēstules uz atsevišķu mapi. Pats svarīgākais: šī kārtošana notiek nevis tīmekļa pastā, bet pasta serverī, brīdī, kad vēstule tiek piegādāta Jūsu pastkastē.
No tā izriet trīs lietas:
- Filtri darbojas arī tad, kad tīmekļa pasts ir aizvērts. Jūsu klēpjdators var būt izslēgts. Tālrunī vēstule uzreiz redzama pareizajā mapē.
- Filtri darbojas tikai ar jaunām vēstulēm. Vēstules, kas jau ir Jūsu pastkastē, paliek savā vietā. Ja šodien izveidojat filtru, vecās vēstules Jums jāpārvieto pašiem.
- Filtri attiecas uz vienu pastkasti. Katrai pastkastei ir savi filtri. Ja vēlaties kaut ko iestatīt visām sava domēna pastkastēm, piemēram, bloķēt sūtītāju, to dariet sava hostinga pārvaldības panelī.
Filtri ir rakstīti valodā Sieve, vienkāršā valodā, kas īpaši paredzēta e-pasta filtrēšanai (RFC 5228). WebOké pasta serveris izmanto Dovecot ar Pigeonhole, Dovecot Sieve realizāciju. Tīmekļa pasts pārvērš Jūsu veidlapā izdarītās izvēles Sieve skriptā un nosūta to uz serveri, izmantojot protokolu ManageSieve (RFC 5804). Jums pašiem Sieve nav jāraksta, taču, ja protat to lasīt, Jūs precīzi saprotat, ko dara Jūsu filtri.
Filtru kopa, nosacījumi un darbības
Filtru kopa ir viss skripts: visi Jūsu pastkastes filtri vienā failā. Jums var būt vairākas filtru kopas, taču aktīva vienmēr ir tikai viena.
Filtru kopā ir filtri, tīmekļa pastā tos dēvē arī par noteikumiem. Katram filtram ir:
- nosaukums, tikai Jums pašiem;
- darbības joma: vēstulei jāatbilst visiem nosacījumiem, vienam no nosacījumiem, vai arī filtrs attiecas uz visām vēstulēm;
- viens vai vairāki nosacījumi: kur filtrs skatās (temats, sūtītājs, cita galvene), kā tas salīdzina un ar kādu tekstu;
- viena vai vairākas darbības: kas notiek, ja nosacījumi izpildās.
Salīdzināt var trīs veidos:
| Tīmekļa pastā | Sieve valodā | Nozīme |
|---|---|---|
| satur | :contains | teksts ir kaut kur galvenē |
| ir vienāds ar | :is | galvene ir tieši šis teksts |
| jāatbilst izteiksmei | :matches | paraugs ar * (nulle vai vairāk rakstzīmju) un ? (tieši viena rakstzīme) |
Visos trijos gadījumos lielajiem un mazajiem burtiem nav nozīmes. Sieve pēc noklusējuma salīdzina ar noteikumu i;ascii-casemap, kas lielos un mazos burtus uzskata par vienādiem. Tātad "factuur" atrod arī "FACTUUR" un "Factuur".
Tā izskatās filtru kopa
Tīmekļa pastā filtru kopu kā tekstu varat apskatīt, izvēloties Vēstuļu filtri > Darbību saraksts > Rediģēt filtru kopu. Piemērs, kā to raksta tīmekļa pasts:
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";
}Rinda pa rindai:
require ["fileinto"];lūdz serverim paplašinājumu, kas nepieciešams, lai pārvietotu uz mapi. Tīmekļa pasts to pats ieraksta augšpusē kopā ar visiem paplašinājumiem, ko skripts izmanto.# rule:[Nieuwsbrieven]ir komentārs. Pēc tā tīmekļa pasts atpazīst Jūsu filtra nosaukumu. Serveris šo rindu izlaiž.if exists "List-Id"ir nosacījums: vēstulei ir galvene List-Id. Tā ir jaunumu vēstulēm un adresātu sarakstiem (RFC 2919).fileinto "Nieuwsbrieven";pārvieto vēstuli uz mapi Nieuwsbrieven (Jaunumu vēstules). Mapes nosaukums ir pilnais nosaukums serverī, ar punktu kā atdalītāju (nodarbība 5.1). Tātad mape zem Ienākošās saucasINBOX.Team.stop;aptur visu skriptu. Nākamie filtri šo vēstuli vairs neskata. Tīmekļa pastā šī darbība saucas Apturēt nosacījumu pārbaudi.if false # ...ir izslēgts filtrs. Ja izslēdzat Filtrs ieslēgts, tīmekļa pasts nosacījumu pārvērš parfalse: nekad nav patiess. Vecais nosacījums paliek kā komentārs, lai vēlāk to varētu atkal ieslēgt.

No augšas uz leju
Serveris lasa skriptu no augšas uz leju un aplūko katru filtru. Šeit ir spēkā trīs noteikumi.
1. Ja nav darbības, vēstule paliek mapē Ienākošās. Sieve paredz netiešo saglabāšanu (implicit keep, RFC 5228, 2.10.2. sadaļa): ja neviens filtrs neko nedara, vēstule vienkārši nonāk mapē Ienākošās.
2. Pēc pārvietošanas vēstule nav arī mapē Ienākošās. fileinto izslēdz netiešo saglabāšanu. Vēstule nonāk izvēlētajā mapē, nevis papildus vēl mapē Ienākošās. Ja vēlaties abus, izmantojiet Kopēt vēstuli uz.
3. Bez stop arī nākamie filtri skatās vēstuli. Ja trūkst stop, serveris turpina ar nākamo filtru. Ja arī tas atbilst, serveris izpilda arī tā darbību. Divas pārvietošanas uz divām mapēm nozīmē, ka vēstule nonāk abās mapēs. Ar stop izšķir pirmais atbilstošais filtrs.
Tāpēc secībai ir nozīme. Iepriekš minētajā piemērā Nieuwsbrieven atrodas virs Facturen, ar stop. Tātad jaunumu vēstule ar "Je factuur" (Jūsu rēķins) temata laukā nonāk mapē Nieuwsbrieven, nevis Facturen. Ja secību apgriežat, šī pati jaunumu vēstule nonāk mapē Facturen, jo šim filtram nav stop un tas tagad ir pirmais. Jaunumu vēstule tad pat būtu abās mapēs. Tāpēc visspecifiskākos filtrus novietojiet augšpusē un pievienojiet tiem stop.
Vēstules izsekošana: tā Jūs to paredzat
Paņemiet vēstuli un izejiet cauri skriptam tā, kā to dara serveris:
- Sāciet ar pirmo filtru. Vai tas ir izslēgts (
if false)? Izlaidiet to. - Vai nosacījums izpildās? Rūpīgi aplūkojiet galveni:
subjectir temats,fromsūtītājs ar vārdu un adresi,tosaņēmējs. - Ja jā: izpildiet darbības. Ja ir
stop, Jūs esat pabeiguši. - Ja nē vai nav stop: pārejiet pie nākamā filtra.
- Beigās: ja neviens filtrs vēstuli nav pārvietojis vai dzēsis, tā atrodas mapē Ienākošās (
INBOX).
Ar šiem pieciem soļiem varat izlasīt jebkuru skriptu, arī garu.
Praksē: tā tas darbojas tīmekļa pastā
Filtrus atradīsiet sadaļā Iestatījumi > Vēstuļu filtri. Sarakstā filtri redzami tādā secībā, kādā serveris tos izpilda; lai mainītu secību, velciet tos. Sadaļā Darbību saraksts ir Rediģēt filtru kopu: tur Jūs redzat un maināt skriptu kā tekstu. Jauna filtra izveides soļi ir aprakstīti Roundcube rokasgrāmatā sadaļā Filtra izveide. Citos tīmekļa pastos tas darbojas līdzīgi: Gmail ir filtri, Outlook.com ir kārtulas. Tie neizmanto Sieve, taču arī tur nozīme ir secībai un apturēšanai.
Kopsavilkums
- Filtri darbojas pasta serverī piegādes brīdī, tātad arī tad, kad tīmekļa pasts ir aizvērts, un tikai ar jaunām vēstulēm.
- Tīmekļa pasts raksta Jūsu filtrus kā Sieve skriptu (RFC 5228) un ar ManageSieve palīdzību ievieto to serverī.
- Satur, ir vienāds ar un jāatbilst izteiksmei pēc noklusējuma nav reģistrjutīgi.
- Ja neviens filtrs neko nedara, vēstule paliek mapē Ienākošās; pēc pārvietošanas tā nav arī mapē Ienākošās.
- Filtri tiek izpildīti no augšas uz leju; stop beidz skriptu, tāpēc secība nosaka rezultātu.
Tests (quiz)
Uzdevums
Uzdevums A6.1: Kur nonāks šī vēstule? Atveriet materiālu filters-1.txt, filtru kopu tādu, kādu to raksta tīmekļa pasts, un berichten-1.txt ar četru ienākošo vēstuļu galvenēm, kas numurētas no 1 līdz 4. Izejiet cauri katrai vēstulei pēc šīs nodarbības pieciem soļiem: no augšas uz leju, izslēgtos filtrus izlaižot, pievēršot uzmanību stop. Katrai vēstulei ierakstiet tās mapes nosaukumu, kurā tā nonāk, tieši tā, kā tas ir rakstīts skriptā; ja vēstule nonāk mapē Ienākošās, ierakstiet INBOX. Programma salīdzina Jūsu četras atbildes ar atbilžu atslēgu un pie katras vēstules parāda, kurš filtrs bija izšķirošais.
Papildu lasāmviela
Ja ir aprakstīti soļi tīmekļa pastā, tie attiecas uz WebOké tīmekļa pastu; citos tīmekļa pastos tas darbojas līdzīgi.
- Roundcube Webmail 7.1: Kā izveidot filtru
- Roundcube Webmail 7.2: Noderīgu filtru piemēri
- Servera puses e-pasta noteikumi (filtri serverī)
- RFC 5228, Sieve: An Email Filtering Language (angļu valodā): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (angļu valodā): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (angļu valodā): https://www.rfc-editor.org/rfc/rfc2919
