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 ender i.
Centrale begreber: filter, Sieve, ManageSieve, filtersæt, regel, betingelse, handling, implicit gem, stop, indeholder, er ens med, matcher udtryk
Filtre kører på serveren
Et filter sorterer din mail automatisk: mail med "faktura" i emnet til mappen 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 til 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 ligger filtrene, som webmailen også kalder 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 og små 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. "faktura" finder altså også "FAKTURA" og "Faktura".
Sådan ser et filtersæt ud
I webmailen kan du se filtersættet som tekst under Filtre > Handlinger > Rediger filtersæt. Et eksempel, som webmailen skriver det:
require ["fileinto"];
# rule:[Nyhedsbreve]
if exists "List-Id"
{
fileinto "Nyhedsbreve";
stop;
}
# rule:[Fakturaer]
if allof (header :contains "subject" "faktura")
{
fileinto "Fakturaer";
}
# rule:[Kollega Mads]
if false # header :contains "from" "mads@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 linjen øverst, med alle de udvidelser, scriptet bruger.# rule:[Nyhedsbreve]er en kommentar. Den bruger webmailen til at genkende 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 "Nyhedsbreve";flytter beskeden til mappen 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 næste filtre kigger ikke længere på beskeden. I webmailen hedder handlingen 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 kan slå den til igen senere.

Oppefra og ned
Serveren læser scriptet oppefra og ned og ser på hvert filter. Her gælder tre regler.
1. Uden handling bliver beskeden i Indbakke. Sieve har implicit gem (implicit keep, RFC 5228, afsnit 2.10.2): gør intet filter noget, havner beskeden helt almindeligt i Indbakke.
2. Efter en flytning ligger beskeden ikke også i Indbakke. En fileinto slår implicit gem fra. Beskeden kommer i den valgte mappe og ikke også 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 næste filter. Passer det filter også, udfører serveren også den handling. To flytninger til to mapper betyder, at beskeden kommer i begge mapper. Med stop er det det første filter, der passer, som bestemmer.
Derfor betyder rækkefølgen noget. I eksemplet ovenfor står Nyhedsbreve over Fakturaer, med et stop. Et nyhedsbrev med "Din faktura" i emnet går altså til Nyhedsbreve og ikke til Fakturaer. Vender du rækkefølgen om, havner det samme nyhedsbrev i Fakturaer, fordi det filter ikke har noget stop og nu kommer 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 første filter. Er det deaktiveret (
if false)? Spring det over. - Er betingelsen opfyldt? 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 ikke er noget stop: gå videre til næste filter.
- Til sidst: har intet filter flyttet eller slettet beskeden, ligger den i Indbakke (
INBOX).
Med de 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: her ser og ændrer du scriptet som tekst. Trinene til et nyt filter står i Roundcube-vejledningen under Opret et filter. I anden webmail virker det på samme 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 oppefra og ned; stop afslutter scriptet, så rækkefølgen afgør resultatet.
Quiz
Opgave
Opgave A6.1: Hvor ender 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: oppefra og ned, spring deaktiverede filtre over, hold øje med stop. Skriv for hver besked navnet på den mappe, den ender i, præcis som det står i scriptet; ender beskeden i Indbakke, skriv så INBOX. Programmet sammenligner dine fire svar med facitlisten 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 webmailen hos WebOké; i anden webmail virker det på samme 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
- Se, download og gendan dine filtre som Sieve-script
