Direct naar de inhoud

Cookie-instellingen

Kies per soort welke cookies je toestaat. Je kunt je keuze altijd wijzigen via Cookie-instellingen onderaan elke pagina. Privacyverklaring

Noodzakelijk

Altijd aan

Nodig om in te loggen, je winkelwagen te bewaren en je keuzes te onthouden. Deze staan altijd aan.

Welke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: je sessie en ingelogd blijven
  • weboke_basket: je winkelwagen
  • wkBtwIncl: prijzen met of zonder btw tonen
  • wok_cookies: je cookiekeuze, 12 maanden

Meet welke advertentie tot een bezoek of bestelling leidt, zodat we niet betalen voor advertenties die niets doen.

Welke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), tot 90 dagen
  • OpenAI Ads, advertenties in ChatGPT
  • wok_aff: via welke partner je bij ons kwam (affiliateprogramma), 60 dagen

4,6

Land en taal

Elk land heeft zijn eigen site, met prijzen en btw van dat land.

Bekijken

Module 6 · 6.1

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 webmailIn SieveBetekenis
bevat:containsde tekst staat ergens in de kopregel
is gelijk aan:isde kopregel is precies deze tekst
komt overeen met expressie:matchespatroon 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 dus INBOX.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 voorwaarde false: nooit waar. De oude voorwaarde blijft als opmerking staan, zodat je hem later weer kunt aanzetten.
Het Sieve-script van de filterset in Filterset bewerken
Je filters zoals de server ze leest: een Sieve-script

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:

  1. Begin bij het eerste filter. Is het uitgeschakeld (if false)? Sla het over.
  2. Klopt de voorwaarde? Kijk precies naar de kopregel: subject is het onderwerp, from de afzender met naam en adres, to de ontvanger.
  3. Zo ja: voer de acties uit. Staat er stop, dan ben je klaar.
  4. Zo nee, of geen stop: ga naar het volgende filter.
  5. 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

1. Je maakt vandaag een filter voor de map Facturen. Wat gebeurt er met de facturen die al in Postvak In staan?



2. Een filter met "Onderwerp bevat factuur" krijgt een mail met het onderwerp "FACTUUR 118". Wat gebeurt er?



3. Wat betekent if false # header :contains "from" "daan@example.com" in een filterset?



4. Een bericht past bij het eerste filter (verplaatsen naar Facturen, zonder stop) en bij het tweede (verplaatsen naar Klanten). Waar komt het terecht?



5. Wanneer bewaart de server een bericht in Postvak In?



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.

Opdracht A6.1: Waar komt deze mail terecht?

Bestand bij deze opdracht: filters-1.txt, berichten-1.txt





Wat je invult en wat we vinden, slaan we niet op. Je browser onthoudt je antwoorden en of je de opdracht hebt gehaald. Ben je aangemeld, dan bewaren we alleen dat je de opdracht (bijna) goed had in Mijn cursussen; daar kun je het ook verwijderen.

Verder lezen

Waar stappen in de webmail staan, gelden ze voor de webmail van WebOké; in andere webmail werkt het vergelijkbaar.

Even geduld…

Stel je domeinen in

Regel per domein de nameservers, de koppeling aan je hosting en wie de eigenaar wordt.

Je domeinen laden…