Modul 6 · 6.1
Så fungerar filter
Modul 6: Automatiskt: filter och frånvaro · Lästid: 10 minuter
Lärandemål: Efter den här lektionen kan du förklara var och när filter körs, läsa ett filterskript i Sieve och förutsäga i vilken mapp ett inkommande meddelande hamnar.
Nyckelbegrepp: filter, Sieve, ManageSieve, filtergrupp, regel, villkor, åtgärd, implicit behållning, stop, innehåller, är lika med, matchar uttryck
Filter körs på servern
Ett filter sorterar din e-post automatiskt: mejl med "factuur" (faktura) i ämnet till mappen Facturen (Fakturor), nyhetsbrev till en egen mapp. Det viktigaste att veta: sorteringen sker inte i webbmejlen, utan på e-postservern, i samma ögonblick som ett meddelande levereras till din brevlåda.
Det får tre följder:
- Filter fungerar även när webbmejlen är stängd. Din laptop kan vara avstängd. Telefonen ser mejlet direkt i rätt mapp.
- Filter fungerar bara på ny e-post. Mejl som redan ligger i din brevlåda stannar där de är. Skapar du ett filter i dag flyttar du de gamla meddelandena själv.
- Filter gäller för en brevlåda. Varje brevlåda har sina egna filter. Vill du ordna något för alla brevlådor på din domän, till exempel blockera en avsändare, gör du det i kontrollpanelen för ditt webbhotell.
Filtren är skrivna i Sieve, ett enkelt språk speciellt för att filtrera e-post (RFC 5228). E-postservern hos WebOké använder Dovecot med Pigeonhole, Dovecots Sieve-implementation. Webbmejlen gör om dina val i formuläret till ett Sieve-skript och skickar det till servern via protokollet ManageSieve (RFC 5804). Du behöver inte skriva Sieve själv, men den som kan läsa det förstår exakt vad filtren gör.
Filtergrupp, regler, villkor och åtgärder
En filtergrupp är hela skriptet: alla filter för din brevlåda i en enda fil. Du kan ha flera filtergrupper, men det är alltid bara en som är aktiv.
I filtergruppen finns filtren, som i webbmejlen ibland också kallas regler. Varje filter har:
- ett namn, bara för dig själv;
- ett sökomfång: meddelandet måste uppfylla alla regler, en av reglerna, eller så gäller filtret för alla meddelanden;
- ett eller flera villkor: var filtret tittar (ämne, avsändare, en annan rubrikrad), hur det jämför och med vilken text;
- en eller flera åtgärder: vad som händer när villkoren stämmer.
Det finns tre sätt att jämföra:
| I webbmejlen | I Sieve | Betydelse |
|---|---|---|
| innehåller | :contains | texten finns någonstans i rubrikraden |
| är lika med | :is | rubrikraden är exakt den här texten |
| matchar uttryck | :matches | mönster med * (noll eller fler tecken) och ? (exakt ett tecken) |
Versaler och gemener spelar ingen roll i något av de tre fallen. Sieve jämför som standard med regeln i;ascii-casemap, som behandlar versaler och gemener lika. "factuur" hittar alltså också "FACTUUR" och "Factuur".
Så ser en filtergrupp ut
I webbmejlen kan du visa filtergruppen som text via Filter > Funktioner > Ändra filtergrupp. Ett exempel så som webbmejlen 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";
}Rad för rad:
require ["fileinto"];ber servern om det tillägg som behövs för att flytta till en mapp. Webbmejlen lägger själv in detta överst, med alla tillägg som skriptet använder.# rule:[Nieuwsbrieven]är en kommentar. Med den känner webbmejlen igen namnet på ditt filter. Servern hoppar över raden.if exists "List-Id"är villkoret: meddelandet har en rubrikrad List-Id. Nyhetsbrev och e-postlistor har en sådan (RFC 2919).fileinto "Nieuwsbrieven";flyttar meddelandet till mappen Nieuwsbrieven (Nyhetsbrev). Mappnamnet är det fullständiga namnet på servern, med punkt som avgränsare (lektion 5.1). En mapp under Inkorg heter alltsåINBOX.Team.stop;stoppar hela skriptet. Efterföljande filter tittar inte längre på meddelandet. I webbmejlen heter åtgärden Avsluta filtrering.if false # ...är ett inaktiverat filter. Stänger du av Filter aktiverat gör webbmejlen om villkoret tillfalse: aldrig sant. Det gamla villkoret står kvar som kommentar, så att du kan slå på det igen senare.

Uppifrån och ned
Servern läser skriptet uppifrån och ned och går igenom varje filter. Då gäller tre regler.
1. Utan åtgärd stannar meddelandet i Inkorg. Sieve har implicit behållning (implicit keep, RFC 5228, avsnitt 2.10.2): gör inget filter något, hamnar meddelandet helt enkelt i Inkorg.
2. Efter en flytt ligger meddelandet inte också i Inkorg. En fileinto stänger av den implicita behållningen. Meddelandet hamnar i den valda mappen och inte dessutom i Inkorg. Vill du ha det på båda ställena, använd Kopiera meddelande till.
3. Utan stop tittar även efterföljande filter. Saknas stop fortsätter servern med nästa filter. Passar även det filtret, utför servern också den åtgärden. Två flyttar till två mappar betyder att meddelandet hamnar i båda mapparna. Med stop är det första passande filtret som avgör.
Därför spelar ordningen roll. I exemplet ovan står Nieuwsbrieven ovanför Facturen, med en stop. Ett nyhetsbrev med "Je factuur" i ämnet går alltså till Nieuwsbrieven och inte till Facturen. Vänder du på ordningen hamnar samma nyhetsbrev i Facturen, eftersom det filtret saknar stop och nu kommer först. Nyhetsbrevet skulle då till och med ligga i båda mapparna. Lägg därför de mest specifika filtren överst och ge dem en stop.
Gå igenom ett meddelande: så förutsäger du det
Ta ett meddelande och gå igenom skriptet så som servern gör:
- Börja vid det första filtret. Är det inaktiverat (
if false)? Hoppa över det. - Stämmer villkoret? Titta noga på rubrikraden:
subjectär ämnet,fromavsändaren med namn och adress,tomottagaren. - Om ja: utför åtgärderna. Står det
stopär du klar. - Om nej, eller om det saknas stop: gå till nästa filter.
- I slutet: har inget filter flyttat eller raderat meddelandet ligger det i Inkorg (
INBOX).
Med de här fem stegen kan du läsa vilket skript som helst, även ett långt.
I praktiken: så fungerar det i webbmejlen
Filter hittar du under Inställningar > Filter. Listan visar dina filter i den ordning servern kör dem; du drar dem för att ändra ordningen. Under Funktioner finns Ändra filtergrupp: där ser och ändrar du skriptet som text. Stegen för ett nytt filter finns i Roundcube-handboken under Skapa ett filter. I andra webbmejltjänster fungerar det på liknande sätt: Gmail har filter, Outlook.com har regler. De använder inte Sieve, men även där gäller ordning och stopp.
Sammanfattning
- Filter körs på e-postservern vid leveransen, alltså även när webbmejlen är stängd, och bara på ny e-post.
- Webbmejlen skriver dina filter som ett Sieve-skript (RFC 5228) och lägger det på servern via ManageSieve.
- Innehåller, är lika med och matchar uttryck skiljer som standard inte på versaler och gemener.
- Gör inget filter något stannar meddelandet i Inkorg; efter en flytt ligger det inte också i Inkorg.
- Filtren körs uppifrån och ned; stop avslutar skriptet, så ordningen avgör resultatet.
Quiz
Uppgift
Uppgift A6.1: Var hamnar det här mejlet? Öppna materialet filters-1.txt, en filtergrupp så som webbmejlen skriver den, och berichten-1.txt, med rubrikraderna för fyra inkommande meddelanden, numrerade 1 till 4. Gå igenom varje meddelande enligt de fem stegen i den här lektionen: uppifrån och ned, hoppa över inaktiverade filter, håll koll på stop. Fyll i för varje meddelande namnet på mappen där det hamnar, exakt så som det står i skriptet; hamnar meddelandet i Inkorg fyller du i INBOX. Programmet jämför dina fyra svar med facit och visar för varje meddelande vilket filter som avgjorde.
Läs mer
Där steg i webbmejlen beskrivs gäller de för WebOkés webbmejl; i andra webbmejltjänster fungerar det på liknande sätt.
- Roundcube Webmail 7.1: Skapa ett filter
- Roundcube Webmail 7.2: Exempel på praktiska filter
- E-postregler på serversidan (filter på servern)
- RFC 5228, Sieve: An Email Filtering Language (engelska): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (engelska): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (engelska): https://www.rfc-editor.org/rfc/rfc2919
