Modul 6 · 6.1
Sådan fungerer filtre
Modul 6: Automatisk: filtre og fravær · Læsetid: 10 minutter
Læringsmål: Efter denne lektion kan du forklare, hvor og hvornår filtre kører, læse et filterscript i Sieve og forudsige, hvilken mappe en indgående besked havner i.
Centrale begreber: filter, Sieve, ManageSieve, filtersæt, regel, betingelse, handling, implicit gemning, stop, indeholder, er ens med, matcher udtryk
Filtre kører på serveren
Et filter sorterer din mail automatisk: mail med "factuur" i emnet til mappen Facturen (fakturaer), nyhedsbreve til en mappe for sig. Det vigtigste at vide: sorteringen sker ikke i webmailen, men på mailserveren, i det øjeblik en besked bliver leveret i din mailboks.
Det betyder tre ting:
- Filtre virker også, når webmailen er lukket. Din bærbare må gerne være slukket. Telefonen ser mailen med det samme i den rigtige mappe.
- Filtre virker kun på ny mail. Mail, der allerede ligger i din mailboks, bliver, hvor den er. Laver du et filter i dag, flytter du selv de gamle beskeder.
- Filtre gælder for én mailboks. Hver mailboks har sine egne filtre. Vil du ordne noget for alle mailbokse på dit domæne, fx blokere en afsender, gør du det i kontrolpanelet til dit webhotel.
Filtrene er skrevet i Sieve, et enkelt sprog lavet specielt til at filtrere mail (RFC 5228). Mailserveren hos WebOké bruger Dovecot med Pigeonhole, Dovecots udgave af Sieve. Webmailen omsætter dine valg i formularen til et Sieve-script og sender det til serveren via protokollen ManageSieve (RFC 5804). Du behøver ikke skrive Sieve selv, men kan du læse det, forstår du præcis, hvad dine filtre gør.
Filtersæt, regler, betingelser og handlinger
Et filtersæt er hele scriptet: alle filtre i din mailboks samlet i én fil. Du kan have flere filtersæt, men der er altid kun ét aktivt.
I filtersættet står filtrene, som i webmailen også kaldes regler. Hvert filter har:
- et navn, kun til dig selv;
- et omfang: beskeden skal opfylde alle regler, én af reglerne, eller filteret gælder for alle meddelelser;
- en eller flere betingelser: hvor kigger filteret (emne, afsender, en anden header), hvordan sammenligner det, og med hvilken tekst;
- en eller flere handlinger: hvad sker der, når betingelserne er opfyldt.
Der er tre måder at sammenligne på:
| I webmailen | I Sieve | Betydning |
|---|---|---|
| indeholder | :contains | teksten står et sted i headeren |
| er ens med | :is | headeren er præcis denne tekst |
| matcher udtryk | :matches | mønster med * (nul eller flere tegn) og ? (præcis ét tegn) |
Store bogstaver betyder ikke noget i nogen af de tre. Sieve sammenligner som standard med reglen i;ascii-casemap, der behandler store og små bogstaver ens. "factuur" finder altså også "FACTUUR" og "Factuur".
Sådan ser et filtersæt ud
I webmailen kan du se filtersættet som tekst med Filtre > Handlinger > Rediger filtersæt. Et eksempel, som webmailen skriver det:
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";
}Linje for linje:
require ["fileinto"];beder serveren om den udvidelse, der skal til for at flytte til en mappe. Webmailen sætter selv dette øverst, med alle de udvidelser, scriptet bruger.# rule:[Nieuwsbrieven]er en kommentar. Med den genkender webmailen navnet på dit filter. Serveren springer linjen over.if exists "List-Id"er betingelsen: beskeden har en List-Id-header. Det har nyhedsbreve og mailinglister (RFC 2919).fileinto "Nieuwsbrieven";flytter beskeden til mappen Nieuwsbrieven (nyhedsbreve). Mappenavnet er det fulde navn på serveren, med punktum som skilletegn (lektion 5.1). En mappe under Indbakke hedder altsåINBOX.Team.stop;stopper hele scriptet. De følgende filtre kigger ikke længere på denne besked. I webmailen hedder den handling Stop behandling af regler.if false # ...er et deaktiveret filter. Slår du Filter aktiveret fra, gør webmailen betingelsen tilfalse: aldrig sand. Den gamle betingelse bliver stående som kommentar, så du senere kan slå den til igen.

Fra top til bund
Serveren læser scriptet fra top til bund og ser på hvert filter. Her gælder tre regler.
1. Uden handling bliver beskeden i Indbakke. Sieve har implicit gemning (implicit keep, RFC 5228, afsnit 2.10.2): gør intet filter noget, havner beskeden helt normalt i Indbakke.
2. Efter en flytning ligger beskeden ikke også i Indbakke. En fileinto slår den implicitte gemning fra. Beskeden havner i den valgte mappe og ikke samtidig i Indbakke. Vil du have begge dele, så brug Kopier besked til.
3. Uden stop kigger de næste filtre også. Mangler stop, fortsætter serveren med det næste filter. Passer det filter også, udfører serveren også den handling. To flytninger til to mapper betyder, at beskeden havner i begge mapper. Med stop er det første passende filter, der bestemmer.
Derfor betyder rækkefølgen noget. I eksemplet ovenfor står Nieuwsbrieven over Facturen, med et stop. Et nyhedsbrev med "Je factuur" i emnet går altså til Nieuwsbrieven og ikke til Facturen. Vender du rækkefølgen om, havner det samme nyhedsbrev i Facturen, for det filter har intet stop og kommer nu først. Nyhedsbrevet ville så endda ligge i begge mapper. Sæt derfor de mest specifikke filtre øverst, og giv dem et stop.
Gå en besked igennem: sådan forudsiger du det
Tag en besked, og gå scriptet igennem, som serveren gør:
- Start ved det første filter. Er det deaktiveret (
if false)? Spring det over. - Passer betingelsen? Se nøje på headeren:
subjecter emnet,fromafsenderen med navn og adresse,tomodtageren. - Hvis ja: udfør handlingerne. Står der
stop, er du færdig. - Hvis nej, eller der er intet stop: gå videre til det næste filter.
- Til sidst: har intet filter flyttet eller slettet beskeden, ligger den i Indbakke (
INBOX).
Med disse fem trin kan du læse ethvert script, også et langt.
I praksis: sådan virker det i webmailen
Filtre finder du under Indstillinger > Filtre. Listen viser dine filtre i den rækkefølge, serveren udfører dem; du trækker dem for at ændre rækkefølgen. Under Handlinger finder du Rediger filtersæt: der ser og ændrer du scriptet som tekst. Trinene til et nyt filter står i Roundcube-vejledningen under Opret et filter. Anden webmail virker på lignende måde: Gmail har filtre, Outlook.com har regler. De bruger ikke Sieve, men også der gælder rækkefølge og stop.
Opsummering
- Filtre kører på mailserveren ved levering, altså også når webmailen er lukket, og kun på ny mail.
- Webmailen skriver dine filtre som et Sieve-script (RFC 5228) og lægger det på serveren via ManageSieve.
- Indeholder, er ens med og matcher udtryk skelner som standard ikke mellem store og små bogstaver.
- Gør intet filter noget, bliver beskeden i Indbakke; efter en flytning ligger den ikke også i Indbakke.
- Filtre kører fra top til bund; stop afslutter scriptet, så rækkefølgen afgør resultatet.
Quiz
Opgave
Opgave A6.1: Hvor havner denne mail? Åbn materialet filters-1.txt, et filtersæt som webmailen skriver det, og berichten-1.txt med headerne fra fire indgående beskeder, nummereret 1 til 4. Gå hver besked igennem efter de fem trin fra denne lektion: fra top til bund, spring deaktiverede filtre over, hold øje med stop. Skriv for hver besked navnet på den mappe, den havner i, præcis som det står i scriptet; havner beskeden i Indbakke, så skriv INBOX. Programmet sammenligner dine fire svar med svarnøglen og viser for hver besked, hvilket filter der var afgørende.
Læs videre
Hvor der står trin i webmailen, gælder de for WebOkés webmail; anden webmail virker på lignende måde.
- Roundcube Webmail 7.1: Opret et filter
- Roundcube Webmail 7.2: Eksempler på nyttige filtre
- Server-side e-mailregler (filtre på serveren)
- RFC 5228, Sieve: An Email Filtering Language (engelsk): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (engelsk): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (engelsk): https://www.rfc-editor.org/rfc/rfc2919
- Je filters als Sieve-script bekijken, downloaden en terugzetten
