Modul 6 · 6.1
Slik fungerer filtre
Modul 6: Automatisk: filtre og fravær · Lesetid: 10 minutter
Læringsmål: Etter denne leksjonen kan du forklare hvor og når filtre kjører, lese et filterskript i Sieve og forutsi hvilken mappe en innkommende melding havner i.
Nøkkelbegreper: filter, Sieve, ManageSieve, filtersett, regel, betingelse, handling, implisitt lagring, stop, inneholder, er lik, treffer uttrykk
Filtre kjører på serveren
Et filter sorterer e-posten din automatisk: e-post med "factuur" i emnet til mappen Facturen, nyhetsbrev til en egen mappe. Det viktigste å vite: sorteringen skjer ikke i webmailen, men på e-postserveren, i det øyeblikket en melding leveres til postboksen din.
Det gir tre følger:
- Filtre virker også når webmailen er lukket. Den bærbare PC-en kan være slått av. Telefonen ser e-posten med en gang i riktig mappe.
- Filtre virker bare på ny e-post. E-post som allerede ligger i postboksen din, blir liggende der den er. Lager du et filter i dag, flytter du de gamle meldingene selv.
- Filtre gjelder for én postboks. Hver postboks har sine egne filtre. Vil du ordne noe for alle postboksene på domenet ditt, for eksempel blokkere en avsender, gjør du det i kontrollpanelet til webhotellet ditt.
Filtrene er skrevet i Sieve, et enkelt språk laget spesielt for å filtrere e-post (RFC 5228). E-postserveren hos WebOké bruker Dovecot med Pigeonhole, Sieve-implementasjonen til Dovecot. Webmailen gjør valgene dine i skjemaet om til et Sieve-skript og sender det via protokollen ManageSieve (RFC 5804) til serveren. Du trenger ikke å skrive Sieve, men den som kan lese det, forstår nøyaktig hva filtrene gjør.
Filtersett, regler, betingelser og handlinger
Et filtersett er hele skriptet: alle filtrene i postboksen din i én fil. Du kan ha flere filtersett, men bare ett er aktivt om gangen.
I filtersettet ligger filtrene, som i webmailen også kalles regler. Hvert filter har:
- et navn, bare for deg selv;
- et omfang: meldingen må oppfylle alle reglene, én av reglene, eller filteret gjelder for alle meldinger;
- én eller flere betingelser: hvor filteret ser (emne, avsender, en annen header), hvordan det sammenligner, og med hvilken tekst;
- én eller flere handlinger: hva som skjer når betingelsene stemmer.
Det finnes tre måter å sammenligne på:
| I webmailen | I Sieve | Betydning |
|---|---|---|
| inneholder | :contains | teksten står et sted i headeren |
| er lik | :is | headeren er nøyaktig denne teksten |
| treffer uttrykk | :matches | mønster med * (null eller flere tegn) og ? (nøyaktig ett tegn) |
Store og små bokstaver spiller ingen rolle for noen av de tre. Sieve sammenligner som standard med regelen i;ascii-casemap, som behandler store og små bokstaver likt. "factuur" finner altså også "FACTUUR" og "Factuur".
Slik ser et filtersett ut
I webmailen kan du se filtersettet som tekst via Filtre > Handlinger > Rediger filtersett. Et eksempel slik 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"];ber serveren om utvidelsen som trengs for å flytte til en mappe. Webmailen setter dette øverst selv, med alle utvidelsene skriptet bruker.# rule:[Nieuwsbrieven]er en kommentar. Med den kjenner webmailen igjen navnet på filteret ditt. Serveren hopper over linjen.if exists "List-Id"er betingelsen: meldingen har en List-Id-header. Nyhetsbrev og e-postlister har den (RFC 2919).fileinto "Nieuwsbrieven";flytter meldingen til mappen Nieuwsbrieven. Mappenavnet er hele navnet på serveren, med punktum som skilletegn (leksjon 5.1). En mappe under Innboks heter altsåINBOX.Team.stop;stopper hele skriptet. Senere filtre ser ikke lenger på denne meldingen. I webmailen heter denne handlingen Stopp evaluering av regler.if false # ...er et deaktivert filter. Slår du av Filter aktivert, gjør webmailen betingelsen om tilfalse: aldri sann. Den gamle betingelsen blir stående som kommentar, slik at du kan slå den på igjen senere.

Ovenfra og ned
Serveren leser skriptet ovenfra og ned og ser på hvert filter. Tre regler gjelder.
1. Uten handling blir meldingen i Innboks. Sieve har implisitt lagring (implicit keep, RFC 5228, avsnitt 2.10.2): gjør ingen filtre noe, havner meldingen helt vanlig i Innboks.
2. Etter en flytting ligger meldingen ikke i tillegg i Innboks. En fileinto slår av den implisitte lagringen. Meldingen havner i den valgte mappen og ikke i tillegg i Innboks. Vil du ha begge deler, bruker du Kopier meldingen til.
3. Uten stop ser også de neste filtrene på meldingen. Mangler stop, går serveren videre til neste filter. Passer det filteret også, utfører serveren den handlingen også. To flyttinger til to mapper betyr at meldingen havner i begge mappene. Med stop er det første filteret som passer, som bestemmer.
Derfor har rekkefølgen betydning. I eksempelet over står Nieuwsbrieven over Facturen, med en stop. Et nyhetsbrev med "Je factuur" i emnet går altså til Nieuwsbrieven, og ikke til Facturen. Snur du rekkefølgen, havner det samme nyhetsbrevet i Facturen, for det filteret har ingen stop og kommer nå først. Nyhetsbrevet ville da til og med ligge i begge mappene. Sett derfor de mest spesifikke filtrene øverst og gi dem en stop.
Gå gjennom en melding: slik forutsier du resultatet
Ta en melding og gå gjennom skriptet slik serveren gjør:
- Begynn med det første filteret. Er det deaktivert (
if false)? Hopp over det. - Stemmer betingelsen? Se nøye på headeren:
subjecter emnet,fromavsenderen med navn og adresse,tomottakeren. - Hvis ja: utfør handlingene. Står det
stop, er du ferdig. - Hvis nei, eller ingen stop: gå til neste filter.
- Til slutt: har ingen filtre flyttet eller slettet meldingen, ligger den i Innboks (
INBOX).
Med disse fem trinnene kan du lese ethvert skript, også når det er langt.
I praksis: slik fungerer det i webmailen
Filtrene finner du under Innstillinger > Filtre. Listen viser filtrene i den rekkefølgen serveren utfører dem; du drar dem for å endre rekkefølgen. Under Handlinger finner du Rediger filtersett: der ser og endrer du skriptet som tekst. Trinnene for et nytt filter står i Roundcube-håndboken under Lage et filter. I annen webmail fungerer det på lignende måte: Gmail har filtre, Outlook.com har regler. De bruker ikke Sieve, men også der gjelder rekkefølge og stopp.
Sammendrag
- Filtre kjører på e-postserveren ved levering, altså også når webmailen er lukket, og bare på ny e-post.
- Webmailen skriver filtrene dine som et Sieve-skript (RFC 5228) og legger det på serveren via ManageSieve.
- Inneholder, er lik og treffer uttrykk skiller som standard ikke mellom store og små bokstaver.
- Gjør ingen filtre noe, blir meldingen i Innboks; etter en flytting ligger den ikke i tillegg i Innboks.
- Filtre kjøres ovenfra og ned; stop avslutter skriptet, så rekkefølgen bestemmer resultatet.
Quiz
Oppgave
Oppgave A6.1: Hvor havner denne e-posten? Åpne materialet filters-1.txt, et filtersett slik webmailen skriver det, og berichten-1.txt, med headerne til fire innkommende meldinger, nummerert 1 til 4. Gå gjennom hver melding etter de fem trinnene i denne leksjonen: ovenfra og ned, hopp over deaktiverte filtre, følg med på stop. Fyll inn for hver melding navnet på mappen den havner i, nøyaktig slik det står i skriptet; havner meldingen i Innboks, fyller du inn INBOX. Programmet sammenligner de fire svarene dine med fasiten og viser for hver melding hvilket filter som var avgjørende.
Les mer
Der det står trinn i webmailen, gjelder de for webmailen til WebOké; i annen webmail fungerer det på lignende måte.
- Roundcube Webmail 7.1: Opprett et filter
- Roundcube Webmail 7.2: Eksempler på nyttige filtre
- E-postregler på serversiden (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
