Module 6 · 6.1
Nederlands
Hoe filters werken
Module 6: Automatisch: filters en afwezigheid · Leestijd: 10 minuten
Leerdoel: Na deze les kun je uitleggen waar en wanneer filters draaien, een filterscript in Sieve lezen en voorspellen in welke map een binnenkomend bericht terechtkomt.
Kernbegrippen: filter, Sieve, ManageSieve, filterset, regel, voorwaarde, actie, impliciet bewaren, stop, bevat, is gelijk aan, komt overeen met expressie
Filters draaien op de server
Een filter sorteert je mail automatisch: mail met "factuur" in het onderwerp naar de map Facturen, nieuwsbrieven naar een eigen map. Het belangrijkste om te weten: dat sorteren gebeurt niet in de webmail, maar op de mailserver, op het moment dat een bericht wordt afgeleverd in je mailbox.
Daaruit volgen drie dingen:
- Filters werken ook als de webmail dicht is. Je laptop mag uit staan. De telefoon ziet de mail meteen in de juiste map.
- Filters werken alleen op nieuwe mail. Mail die al in je mailbox staat, blijft waar hij is. Maak je vandaag een filter, dan verplaats je de oude berichten zelf.
- Filters gelden voor één mailbox. Elke mailbox heeft zijn eigen filters. Wil je iets voor alle mailboxen van je domein regelen, zoals een afzender blokkeren, dan doe je dat in het beheerpaneel van je hosting.
De filters zijn geschreven in Sieve, een eenvoudige taal speciaal voor het filteren van mail (RFC 5228). De mailserver bij WebOké gebruikt Dovecot met Pigeonhole, de Sieve-uitvoering van Dovecot. De webmail zet jouw keuzes in het formulier om in een Sieve-script en stuurt dat via het protocol ManageSieve (RFC 5804) naar de server. Jij hoeft geen Sieve te schrijven, maar wie het kan lezen, begrijpt precies wat zijn filters doen.
Filterset, regels, voorwaarden en acties
Een filterset is het complete script: alle filters van je mailbox in één bestand. Je kunt meer filtersets hebben, maar er is er altijd maar één actief.
In de filterset staan de filters, in de webmail ook wel regels genoemd. Elk filter heeft:
- een naam, alleen voor jezelf;
- een zoekbereik: het bericht moet voldoen aan alle regels, aan één van de regels, of het filter geldt voor alle berichten;
- een of meer voorwaarden: waar kijkt het filter (onderwerp, afzender, een andere kopregel), hoe vergelijkt het, en met welke tekst;
- een of meer acties: wat gebeurt er als de voorwaarden kloppen.
Voor het vergelijken zijn er drie manieren:
| In de webmail | In Sieve | Betekenis |
|---|---|---|
| bevat | :contains | de tekst staat ergens in de kopregel |
| is gelijk aan | :is | de kopregel is precies deze tekst |
| komt overeen met expressie | :matches | patroon met * (nul of meer tekens) en ? (precies één teken) |
Hoofdletters maken bij alle drie niet uit. Sieve vergelijkt standaard met de regel i;ascii-casemap, die hoofd- en kleine letters gelijk behandelt. "factuur" vindt dus ook "FACTUUR" en "Factuur".
Zo ziet een filterset eruit
In de webmail kun je de filterset als tekst bekijken met Filters > Acties > Filterset bewerken. Een voorbeeld zoals de webmail het schrijft:
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";
}Regel voor regel:
require ["fileinto"];vraagt de server om de uitbreiding die nodig is om naar een map te verplaatsen. De webmail zet dit er zelf boven, met alle uitbreidingen die het script gebruikt.# rule:[Nieuwsbrieven]is een opmerking. Daarmee herkent de webmail de naam van je filter. De server slaat de regel over.if exists "List-Id"is de voorwaarde: het bericht heeft een kopregel List-Id. Nieuwsbrieven en mailinglijsten hebben die (RFC 2919).fileinto "Nieuwsbrieven";verplaatst het bericht naar de map Nieuwsbrieven. De mapnaam is de volledige naam op de server, met de punt als scheidingsteken (les 5.1). Een map onder Postvak In heet dusINBOX.Team.stop;stopt het hele script. Volgende filters kijken niet meer naar dit bericht. In de webmail heet die actie Stop met regels uitvoeren.if false # ...is een uitgeschakeld filter. Zet je Filter ingeschakeld uit, dan maakt de webmail van de voorwaardefalse: nooit waar. De oude voorwaarde blijft als opmerking staan, zodat je hem later weer kunt aanzetten.

Van boven naar beneden
De server leest het script van boven naar beneden en bekijkt elk filter. Daarbij gelden drie regels.
1. Zonder actie blijft het bericht in Postvak In. Sieve kent het impliciet bewaren (implicit keep, RFC 5228, sectie 2.10.2): doet geen enkel filter iets, dan komt het bericht gewoon in Postvak In.
2. Na een verplaatsing staat het bericht niet ook nog in Postvak In. Een fileinto zet dat impliciet bewaren uit. Het bericht komt in de gekozen map en niet daarnaast in Postvak In. Wil je wel allebei, gebruik dan Kopieer bericht naar.
3. Zonder stop kijken de volgende filters ook. Ontbreekt stop, dan gaat de server door met het volgende filter. Past dat filter ook, dan voert de server ook die actie uit. Twee verplaatsingen naar twee mappen betekent dat het bericht in beide mappen komt. Met stop beslist het eerste passende filter.
Daarom doet de volgorde ertoe. In het voorbeeld hierboven staat Nieuwsbrieven boven Facturen, met een stop. Een nieuwsbrief met "Je factuur" in het onderwerp gaat dus naar Nieuwsbrieven, en niet naar Facturen. Draai je de volgorde om, dan belandt diezelfde nieuwsbrief in Facturen, want dat filter heeft geen stop en komt nu eerst. De nieuwsbrief zou dan zelfs in beide mappen staan. Zet daarom de meest specifieke filters bovenaan en geef ze een stop.
Een bericht doorlopen: zo voorspel je het
Neem een bericht en loop het script na zoals de server dat doet:
- Begin bij het eerste filter. Is het uitgeschakeld (
if false)? Sla het over. - Klopt de voorwaarde? Kijk precies naar de kopregel:
subjectis het onderwerp,fromde afzender met naam en adres,tode ontvanger. - Zo ja: voer de acties uit. Staat er
stop, dan ben je klaar. - Zo nee, of geen stop: ga naar het volgende filter.
- Aan het eind: heeft geen enkel filter het bericht verplaatst of verwijderd, dan staat het in Postvak In (
INBOX).
Met deze vijf stappen kun je elk script lezen, ook als het lang is.
In de praktijk: zo werkt het in de webmail
Filters vind je bij Instellingen > Filters. De lijst toont je filters in de volgorde waarin de server ze uitvoert; je sleept ze om de volgorde te veranderen. Onder Acties staat Filterset bewerken: daar zie en wijzig je het script als tekst. De stappen voor een nieuw filter staan in de Roundcube-handleiding bij Een filter maken. In andere webmail werkt het vergelijkbaar: Gmail heeft filters, Outlook.com regels. Die gebruiken geen Sieve, maar ook daar gelden volgorde en stoppen.
Samenvatting
- Filters draaien op de mailserver bij aflevering, dus ook als de webmail dicht is, en alleen op nieuwe mail.
- De webmail schrijft je filters als Sieve-script (RFC 5228) en zet het via ManageSieve op de server.
- Bevat, is gelijk aan en komt overeen met expressie zijn standaard niet hoofdlettergevoelig.
- Doet geen filter iets, dan blijft het bericht in Postvak In; na een verplaatsing staat het niet ook nog in Postvak In.
- Filters lopen van boven naar beneden; stop beëindigt het script, dus de volgorde bepaalt de uitkomst.
Quiz
Opdracht
Opdracht A6.1: Waar komt deze mail terecht? Open het materiaal filters-1.txt, een filterset zoals de webmail die schrijft, en berichten-1.txt, met de kopregels van vier binnenkomende berichten, genummerd 1 tot en met 4. Loop elk bericht na volgens de vijf stappen uit deze les: van boven naar beneden, uitgeschakelde filters overslaan, letten op stop. Vul per bericht de naam in van de map waar het terechtkomt, precies zoals die in het script staat; komt het bericht in Postvak In, vul dan INBOX in. Het programma vergelijkt je vier antwoorden met de antwoordsleutel en laat bij elk bericht zien welk filter de doorslag gaf.
Verder lezen
Waar stappen in de webmail staan, gelden ze voor de webmail van WebOké; in andere webmail werkt het vergelijkbaar.
- Roundcube Webmail 7.1: Een filter maken
- Roundcube Webmail 7.2: Voorbeelden van handige filters
- Server-side e-mailregels (filters op de server)
- RFC 5228, Sieve: An Email Filtering Language (Engels): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (Engels): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (Engels): https://www.rfc-editor.org/rfc/rfc2919
