Sieve-filter (geavanceerde aangepaste filters)
- Lezen
- 38 min
- Categorie
- E-mails ontvangen en lezen
Proton Mail biedt gebruikers verschillende manieren om e-mails automatisch te filteren door tags toe te wijzen of ze in mappen te sorteren. Over het algemeen zijn er drie methoden:
- Afzenders toevoegen aan de blokkeringslijst en acceptatielijsten zodat ze altijd of nooit in de spammap worden geplaatst;
- Een aangepast filter aanmaken met de interactieve interface van Proton Mail;
- [Meest geavanceerd] Een aangepast filter aanmaken in Sieve.
Van deze methoden biedt het aanmaken van een aangepast filter in Sieve de meeste veelzijdigheid, maar het is ook ingewikkelder in het gebruik. Om deze reden beschouwen we Sieve als een geavanceerde functie voor gebruikers met enige technische ervaring. Voor de meeste gebruikers is de interactieve interface geschikt om de aangepaste filters te bouwen die u nodig heeft.
Inhoudsopgave
Wat is Sieve?
Sieve is een programmeertaal die wordt gebruikt om e-mails te filteren. U kunt filters in Sieve maken door eenvoudige regels te schrijven. Bijvoorbeeld: “Geef alle berichten van Kyle het groene label”. Door deze regels te combineren, kunt u een geavanceerd filtersysteem creëren.
U kunt Sieve-regels helemaal zelf schrijven, ze overnemen uit voorbeelden zoals die in dit artikel, of software gebruiken die dit eenvoudiger maakt.
In feite bieden we u al een manier om Sieve-filters te maken via de interactieve interface, die uw invoer gebruikt om Sieve-filters te genereren. Een andere goede manier om Sieve te leren is door filters te maken met de interactieve interface en de filters in Sieve te bewerken, aangezien de interactieve interface zelf een subset van Sieve gebruikt.
Vergelijk bijvoorbeeld het volgende filter dat is aangemaakt met de interactieve interface…
… met de code voor hetzelfde filter dat wordt weergegeven in de Sieve-editor:
Dit artikel laat u kennismaken met Sieve en legt uit hoe u uw eigen Sieve-filters kunt schrijven. Als u meer informatie nodig heeft over het gebruik van Sieve, zijn er online tal van andere handleidingen die u kunnen helpen. Als u vragen heeft over Sieve in Proton Mail die op deze pagina niet worden beantwoord, kunt u altijd hier contact opnemen met ons ondersteuningsteam.
Aan de slag
Om te beginnen met het maken van Sieve-filters, logt u in op mail.proton.me(nieuw venster) en gaat u naar Instellingen → Alle instellingen → Proton Mail → Filters → Sieve-filter toevoegen.
Een Sieve-script bestaat uit een lijst met opdrachten. In de meeste scripts begint het met een require-opdracht. De opdracht require laadt een extensie die een bepaalde functionaliteit biedt. Om bijvoorbeeld een label toe te wijzen of een bericht in een map te plaatsen, hebben we de opdracht fileinto nodig.
Om deze opdracht te laden, schrijven we simpelweg:
require "fileinto";
Om meerdere extensies te laden, kunt u een lijst gebruiken:
require ["fileinto", "imap4flags"];
In dit geval laadt imap4flags een extensie waarmee u e-mail als gelezen kunt markeren. Na de opdracht require zult u vaak enkele tests uitvoeren op het binnenkomende bericht. Dit wordt gedaan door if te combineren met een andere opdracht zoals address of header.
Ten slotte kunt u, als de tests slagen, een actie toepassen op een bericht. Stel dat we bijvoorbeeld alle e-mails van een specifieke afzender in dezelfde map willen plaatsen en de binnenkomende e-mail als gelezen willen markeren. Dit kan als volgt worden geschreven:
require ["fileinto", "imap4flags"];
# I don't really like Spott
if address :is "from" "Spott.Tenerman@northpark.example.com"
{
addflag "\\Seen";
fileinto "enemies";
}Houd er rekening mee dat het #-teken een opmerking aangeeft en niet wordt geïnterpreteerd als onderdeel van het Sieve-script. Bovendien moet de map of het label dat u instelt (hier enemies) in uw omgeving bestaan: u kunt hier leren hoe u mappen en labels aanmaakt. Nadat u dit filter heeft ingevoerd, klikt u op de knop OPSLAAN. Uw filter wordt nu uitgevoerd voor elke binnenkomende e-mail.
Natuurlijk wilt u misschien e-mails van meerdere afzenders in dezelfde map plaatsen. In dit geval kunt u een lijst met strings doorgeven aan de address-opdracht (een string(nieuw venster) is een reeks tekens, in dit geval een e-mailadres):
require ["fileinto", "imap4flags"];
# I don't really like Spott and Kyyyhel
if address :is "from" ["Spott.Tenerman@northpark.example.com", "Kyhel.Broski@northpark.example.com"]
{
addflag "\\Seen";
fileinto "enemies";
}Houd er rekening mee dat wanneer u een string kunt doorgeven aan een testvoorwaarde, het meestal ook mogelijk is om een lijst door te geven. Er wordt dan geprobeerd een overeenkomst te vinden door een van de strings in de lijst te proberen. Dit geldt niet voor opdrachten zoals fileinto, addflag enz.
Maar Sieve is krachtiger dan alleen het wijzigen van de volgorde van uw postvak. Het stelt u ook in staat om e-mails af te wijzen met een antwoordbericht:
require "reject";
# Reject mails that spell my name wrong
if header :contains "subject" "Kyhel"
{
reject "My name is not Kyhel";
}Tests gebruiken
Tests combineren in Sieve
Zoals we u in het gedeelte Aan de slag hebben laten zien, kunt u met de opdracht if tests uitvoeren op binnenkomende berichten om te bepalen of een e-mail moet worden beïnvloed door een require-opdracht.
Naast de opdracht if zijn er andere testopdrachten waarmee u uw script op een eenvoudige manier kunt structureren.
Else
Met de opdracht else kunt u iets doen wanneer de opdracht if de bijbehorende acties niet heeft uitgevoerd. Een voorbeeld hiervan is:
require ["fileinto"];
# If the subject contains something incomprehensible, then put the mail into the kenny folder
if header :contains "subject" "mmph mmph"
{
fileinto "Kenny";
} else {
fileinto "Understandable";
}Hier wordt de e-mail verplaatst naar de map Kenny als het onderwerp exact mmph mmph is. In het andere geval (dus wanneer het onderwerp niet exact mmph mmph is) wordt de e-mail verplaatst naar de map Understandable.
Elsif
De opdracht elsif is de samentrekking van else if. Net als de opdracht else wordt deze uitgevoerd als de if-voorwaarde onjuist is, maar alleen als de elsif-voorwaarde juist is. Als de elsif-voorwaarde niet juist is, wordt het volgende elsif– of else-blok uitgevoerd.
require ["fileinto", "imap4flags"];
# If the subject contains something incomprehensible, then put the mail into the kenny folder
if header :contains "subject" "mmph mmph"
{
fileinto "Kenny";
# Kyhel sends me only speeches
} elsif address :is "from" "Kyhel.Broski@northpark.example.com" {
fileinto "Speeches";
} else {
# otherwise the mail is important, so add a star.
addflag "\\Flagged";
}Houd er rekening mee dat er slechts één van de if-, elsif– of else-blokken wordt uitgevoerd in een enkele run.
Anyof
Soms moet u een commando uitvoeren wanneer een van de verschillende tests slaagt. Hiervoor kunt u het commando anyof gebruiken. Dit doet u door anyof te schrijven, gevolgd door een haakje openen ‘(’, de instructies die u wilt testen gescheiden door komma’s, en een haakje sluiten ‘)’.
require ["fileinto", "imap4flags"];
# Kenny either sends from kenny@northpark.example.com or puts "mmph mmph" in the subject.
if anyof(address :is "from" "kenny@northpark.example.com", header :contains "subject" "mmph mmph")
{
fileinto "Kenny";
}Dit script plaatst berichten die afkomstig zijn van kenny@northpark.example.com of mmph mmph in de onderwerpregel bevatten in de map Kenny.
Allof
De tegenhanger van anyof bestaat ook: allof. Hiermee kunt u een commando alleen uitvoeren wanneer alle opgegeven voorwaarden overeenkomen:
require ["fileinto", "imap4flags"];
# Kenny always sends me mails with mmph mmph
if allof(address :is "from" "Kenny@northpark.example.com", header :contains "subject" "mmph mmph")
{
fileinto "Kenny";
}
Dit script plaatst berichten die afkomstig zijn van kenny@northpark.example.com en mmph mmph in de onderwerpregel bevatten in de map Kenny.
Not
Ten slotte moet u soms een commando toepassen als iets niet overeenkomt. Door not voor de instructie te plaatsen, zorgt u ervoor dat dit gebeurt:
require ["fileinto", "imap4flags"];
# If a subject line does not contain real guitar put it into the young people folder
if not header :contains "subject" "real guitar"
{
fileinto "Young people";
}Wat gelijk is aan:
require ["fileinto", "imap4flags"];
# The else part will be evaluated if the condition is not true
if header :contains "subject" "real guitar"
{
# do nothing
} else {
fileinto "Young people";
}Dit plaatst alle e-mails die geen real guitar in de onderwerpregel bevatten in de map Young people.
Het is natuurlijk mogelijk om al deze tests met elkaar te combineren. U wilt bijvoorbeeld een e-mail een ster geven als deze niet van Kenny afkomstig is en ook geen mmph mmph in het onderwerp bevat:
require ["fileinto", "imap4flags"];
if not anyof ( header :contains "subject" "mmph mmph",
address :is "from" "Kyhel.Broski@northpark.example.com" ) {
addflag "\\Flagged";
}Tests uitvoeren op headers
Met het commando address kunt u tests uitvoeren op adresheaders, zoals de headers from, to en sender. U kunt verschillende delen van het e-mailadres extraheren door een van de volgende flags te gebruiken:
- :localpart — het gedeelte voor het apenstaartje (@)
- :domain — het gedeelte na het apenstaartje (@)
- :all — het volledige adres
Het volgende fragment legt het gebruik van dit commando uit:
require ["fileinto", "imap4flags"];
# Northpark people are made of paper, springfield are mostly yellow
if address :domain "from" "northpark.example.com"
{
fileinto "PaperPeople";
} elsif address :domain "from" "springfield.example.com"{
fileinto "YellowPeople";
}
if address :localpart "from" "chef"
{
addflag "\\Flagged";
}Kortom, dit script plaatst alles wat verzonden is vanaf het domein northpark.example.com in PaperPeople en vanaf springfield.example.com in YellowPeople.
Bovendien maakt het niet uit vanaf welk domein een e-mail wordt verzonden; als het gedeelte voor de @ gelijk is aan chef (bijv. chef@example.com), dan wordt het bericht gemarkeerd. Een ander interessant gebruik is om alles wat naar één adres wordt verzonden automatisch in een map op te slaan:
require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :localpart "to" "support"
{
fileinto "Support";
}Geavanceerd
Het commando envelope stelt u in staat om meer tests uit te voeren. Over het algemeen haalt de address-test alleen de waarde uit de header op. In de SMTP-sessie kan men echter een ander from-adres opgeven dan het adres in de header.
In de header-interface van Proton Mail is de envelope-from gelijk aan de return-path-header en de envelope-to gelijk aan de x-original-to-header.
Met het commando envelope kunt u de daadwerkelijke to:– en from:-adressen uit de envelope ophalen. Let op dat er geen andere velden bestaan dan deze twee, dus sender bestaat niet in dit commando. Houd er rekening mee dat envelope zich in een extensie bevindt en het dus vereist is dat u deze extensie eerst via require activeert.
require ["fileinto", "imap4flags", "envelope"];
# Northpark people are made of paper, springfield are mostly purple
if envelope :domain "from" "northpark.example.com"
{
fileinto "PaperPeople";
} elsif envelope :domain "from" "springfield.example.com"{
fileinto "PurplePeople";
}
if envelope :localpart "from" "chef"
{
addflag "\\Flagged";
}Comparators gebruiken om twee waarden te evalueren
Wanneer een test twee waarden evalueert, is het mogelijk om aan te geven hoe deze vergelijking wordt uitgevoerd met behulp van verschillende flags die comparators worden genoemd. Eerder hebben we al twee comparators gebruikt: :is en :contains, die controleren of de opgegeven tekenreeks exact gelijk is aan de specifieke waarde, en of de specifieke waarde de opgegeven tekenreeks bevat, zoals in de volgende test.
require ["fileinto", "imap4flags"];
if not anyof (
header :contains "subject" "mmph mmph", # the subject contains mmph mmph
address :is "from" "Kyhel.Broski@northpark.example.com" # the recipient is exactly Kyhel.Broski@northpark.example.com
) {
addflag "\\Flagged";
}De comparator :matches kan ook worden gebruikt om een specifiekere indeling te definiëren. Deze vergelijkt beide waarden van begin tot eind, net als de comparator :is. In het geval van :matches kan de waarde die u hebt gedefinieerd echter de waarden ? en * bevatten. Het vraagteken komt overeen met één teken, en de ster (jokerteken genoemd) komt overeen met nul of meer tekens.
Met deze indeling kunt u deze test aanmaken:
require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph*" {
addflag "\\Flagged";
}In dit voorbeeld slaagt de test als het onderwerp van het bericht begint met mmph en vervolgens een of meer willekeurige tekens daarna bevat. Met andere woorden, de e-mail wordt gemarkeerd wanneer het onderwerp begint met ‘mmph’. ‘mmph mmph’ en ‘mmph mmph Hello’ komen beide overeen; ‘Hello mmph’ en ‘Springfield sales’ niet.
De ster kan ook in het midden van de waarde en meerdere keren worden gebruikt, als volgt:
require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph *mmph *mmph" {
addflag "\\Flagged";
}Deze test komt overeen als het onderwerp begint met ‘mmph ’ (met een spatie), een andere ‘mmph ’ (met een spatie) bevat en eindigt met ‘mmph’ (zonder spatie). Overeenkomende onderwerpen zijn ‘mmph mmph mmph’, ‘mmph mmph mmphmmph’ of ‘mmph is mmph and mmph’.
Deze :matches-comparator kan zeer nuttig zijn bij de vergelijking van adressen. Zoals u wellicht weet, heeft Proton Mail verschillende domeinen: protonmail.com en proton.me. Als u wilt controleren of een bericht afkomstig is van een Proton Mail-gebruiker, kunt u dit script gebruiken:
require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :domain :matches "from" "protonmail.*"
{
fileinto "Internal";
}Als u om de een of andere reden exact het teken * of ? moet matchen, dan kunt u deze escapen door er \\ voor te plaatsen: \\* komt overeen met een ster en \\? komt overeen met een vraagteken.
Let op dat we ook de regex-extensie ondersteunen, die ook de comparator :regex definieert. Deze comparator is een nauwkeurigere versie van :matches, maar is erg complex. Lees voor meer informatie de officiële documentatie(nieuw venster).
In sommige gevallen (zoals u in het vervolg van dit artikel zult zien), wilt u wellicht numerieke waarden vergelijken. Het pakket relational is gemaakt voor dit gebruik. Dit pakket definieert de comparator :value die wordt gevolgd door het vergelijkingstype.
Hiermee kunt u controleren of een waarde groter is dan (waarbij het vergelijkingstype “gt” is), groter dan of gelijk is aan (“ge”), gelijk is aan (“eq”), kleiner dan of gelijk is aan (“le”) of kleiner is dan (“lt”) de opgegeven waarde.
Bij het vergelijken van numerieke waarden is het pakket comparator-i;ascii-numeric ook erg handig. Het vertelt de scriptinterpreter dat de inhoud van de tekenreeks een getal is, en geen gewone tekenreeks. Het kan worden gebruikt door aan de test :comparator “i;ascii-numeric” toe te voegen.
Met al deze informatie kunnen we het volgende script bouwen:
require ["fileinto", "relational", "comparator-i;ascii-numeric"];
if header :value "ge" :comparator "i;ascii-numeric" "subject" "2"
{
fileinto "Dummy example";
}Deze test verplaatst het bericht naar de map Dummy example als het onderwerp groter of gelijk is aan 2. Als het onderwerp geen getal is, maar een tekst, dan zal de test mislukken. Als zodanig ziet dit voorbeeld er erg onnozel uit, maar het is bedoeld om te worden gebruikt in combinatie met andere extensies zoals date, die we later in dit artikel zullen definiëren.
Vergelijking met behulp van de context in Sieve
U kunt ook toegang krijgen tot informatie met betrekking tot uw account en de Proton Mail-context in het algemeen met behulp van extensies. U kunt bijvoorbeeld controleren of het adres van de afzender in uw contactenlijst staat.
Toegang krijgen tot uw contactenlijst
U krijgt toegang tot uw contactenlijst met behulp van de extensie extlists. Gecombineerd met de headertests kunt u vervolgens controleren of een contactpersoon in uw contactenlijst staat.
require ["fileinto", "extlists"];
# Checks that the sender is in your personal address book
if header :list "from" ":addrbook:personal?label=Family"
{
fileinto "Known";
}Deze test markeert een bericht met het label Known als de afzender is opgenomen in de lijst :addrbook:personal?label=Family. De lijst kan in twee delen worden opgesplitst. Ten eerste betekent :addrbook:personal dat het adres in uw persoonlijke adresboek staat. Ten tweede verfijnt label=Family de lijst verder, waarbij wordt gespecificeerd dat de contactpersoon, naast dat deze in uw adresboek staat, ook moet behoren tot de contactgroep Family. Indien nodig kunt u dit label wijzigen in een andere contactgroep. U zou desgewenst :addrbook:personal?label=Work kunnen gebruiken, in welk geval de test alleen slaagt als de afzender in uw adresboek staat en deel uitmaakt van de contactgroep Work.
Meer in het algemeen respecteert een lijst het Tag URI Scheme(nieuw venster), en kunt u extra parameters toevoegen om uw filters te verfijnen. Vervolgens kunt u deze lijst als volgt gebruiken:
require ["fileinto", "extlists"];
# replace :your:list:here by the list you want to use
if header :list "from" ":your:list:here"
{
# some actions...
}We hebben vier verschillende lijsten verstrekt:
- :addrbook:personal¹ controleert of een adres in uw contactenlijst staat. De lijst accepteert de parameter label die overeenkomt met een specifieke contactgroep. Deze parameter kan in vier subversies worden afgewezen:
- :addrbook:personal?label=something komt overeen met een contactpersoon die zich in de contactgroep “something” bevindt;
- :addrbook:personal?label.starts-with=something komt overeen met een contactpersoon die behoort tot ten minste één groep die begint met “something”;
- :addrbook:personal?label.ends-with=something komt overeen met een contactpersoon die behoort tot ten minste één groep die eindigt op “something”;
- :addrbook:personal?label.contains=something komt overeen met een contactpersoon die behoort tot ten minste één groep die “something” bevat.
U kunt ook toegang krijgen tot cryptografische informatie met betrekking tot de overeenkomende e-mail:
- :addrbook:personal?keypinning=true komt overeen met een contactpersoon die een vertrouwde sleutel heeft. Als u ‘true’ in ‘false’ verandert, komt dit overeen met een contactpersoon die geen vertrouwde sleutel heeft;
- :addrbook:personal?encryption=true komt overeen met een contactpersoon voor wie versleuteling is ingeschakeld. Als u ‘true’ in ‘false’ verandert, komt dit overeen met een contactpersoon voor wie de versleuteling niet is ingesteld of is uitgeschakeld;
- :addrbook:personal?signing=true komt overeen met een contactpersoon voor wie ondertekening is ingeschakeld. Als u true verandert in false, komt dit overeen met een contactpersoon voor wie ondertekening is uitgeschakeld.
- :addrbook:myself¹ komt overeen met elk adres dat uw eigendom is;
- :addrbook:organization komt overeen met elk adres dat eigendom is van iemand in de organisatie waarvan u lid bent;
- :incomingdefaults:inbox controleert of het adres op uw acceptatielijst staat;
- :incomingdefaults:spam controleert of het adres op uw blokkeringslijst staat.
In combinatie met de variabele-extensie (beschreven in de volgende paragraaf), worden de overeenkomende variabelen gewijzigd. De overeenkomende variabele ${0} bevat altijd het laatste e-mailadres in de opgegeven lijst. Als de lijst is gemarkeerd met noot 1, bevat de overeenkomende variabele ${1} de weergavenaam.
Met de onderstaande lijsten kunt u bijvoorbeeld een filter maken dat alle e-mails verwijdert die zijn ontvangen van anderen dan uw gezin of iemand op uw whitelist:
require "extlists";
# checks that the sender is not in the contact group Family, whilelisted or yourself
if not anyof(
header :list "from" ":addrbook:personal?label=Family",
header :list "from" ":incomingdefaults:inbox",
header :list "from" ":addrbook:myself"
) {
discard; # permanently delete the email
}Als aan die voorwaarde is voldaan, wordt de actie discard uitgevoerd. Deze actie verwijdert de e-mail onmiddellijk en permanent. U kunt deze ook eenvoudig naar de prullenbak verplaatsen met een fileinto -actie in plaats van discard: fileinto “trash”;.
Variabelen aanmaken
Een ander handig hulpmiddel bij het beheren van de context is de definitie van een variabele. Een variabele is een tijdelijke opslaglocatie waarin u tekst kunt plaatsen en deze kunt labelen met een naam. Later kunt u deze inhoud hergebruiken door deze bij de naam te noemen. U zou bijvoorbeeld het volgende script kunnen hebben:
require ["reject", "variables"];
# First check who is the sender
if allof(
address :is "from" "Kenny@northpark.example.com",
header :contains "subject" "mmph mmph"
) {
# It's from Kenny!
# Create the variable message containing 'mmph mmph'
set "message" "mmph mmph";
} else {
# Create the variable message containing 'Sorry, I don't want emails today!'
set "message" "Sorry, I don't want emails today!";
}
# Then, reject the message
reject "${message}";Het doel van dit script is om een e-mail af te wijzen met een gepersonaliseerd bericht. Als de originele e-mail van kenny is en het onderwerp ‘mmph mmph‘ is, wordt de variabele ‘message‘ aangemaakt met de inhoud mmph mmph. In het andere geval wordt het bericht ingevuld met ‘Sorry, I don’t want emails today!‘. Vervolgens hergebruiken we in de laatste stap deze variabele in de opdracht reject.
Sieve definieert variabelen niet standaard, dus ze zijn gedefinieerd in de extensie variables, die aan het begin van uw script moet worden vereist. Er zijn twee manieren om een variabele te definiëren.
- Expliciete aanmaak van een variabele:
De actie set is bedoeld om een variabele aan te maken.
require "variables"; # Create a variable called "labelname" and containing the string "Work". set "labelname" "Work";
De eerste string is de naam van uw variabele en de tweede is de waarde van uw variabele. Het vorige voorbeeld maakt dus een variabele aan met de naam labelname en de inhoud Work.
Zodra een variabele is gedefinieerd, kunt u deze aanroepen door de volgende indeling in een string toe te voegen: ${name}, waarbij name de naam van uw variabele is. Bij het uitvoeren wordt deze vervangen door de waarde van de variabele. (Als u de variabele niet heeft gedefinieerd, wordt deze vervangen door een lege string.) Dus in het volgende script:
require "variables";
require "fileinto";
# Create a variable called "labelname" and containing the string "Work".
set "labelname" "Work";
# Move the email in "${foldername}/${labelname}" which becomes after variable resolution "/Work";
fileinto "${foldername}/${labelname}";Uw e-mail krijgt het label /Work. Omdat we de variabele labelname al hebben gedefinieerd, wordt deze dus vervangen door Work. De variabele foldername is echter niet gedefinieerd, dus deze wordt gewoon verwijderd.
- Impliciete toewijzing van een variabele:
De meest interessante usecase van variabelen is bij het gebruik van een :matches-test. Laten we het volgende voorbeeld nemen, waarbij de afzender van de e-mail test@proton.me is:
require "variables";
require "fileinto";
# do a matches test
if header :matches "from" "*@*" {
# The first * matches "test", the second "protonmail".
# Thus, the first matching variable contains "test"
fileinto "${1}";
}Bij gebruik met de variabelen-extensie wordt het resultaat van een match-bewerking opgeslagen in de variabelen. Verschillende variabelen worden ingesteld met een numerieke naam. Eerst bevat de variabele 0 de volledige match (in ons voorbeeld is dat het volledige adres: test@proton.me). Vervolgens wordt de eerste overeenkomende groep toegewezen aan de variabele 1 (in ons voorbeeld is dat test), de tweede overeenkomende groep aan de tweede variabele (proton.me), enzovoort tot de laatste overeenkomende groep.
In ons voorbeeld wordt de opdracht fileinto uitgevoerd. De locatie is gedefinieerd als ${1}, wat wordt herkend als een variabele en dus wordt vervangen door de waarde ervan, zoals hierboven berekend: test.
Let op: het is ook mogelijk om variabelen toe te wijzen in een :regex-test, met behulp van groepen voor reguliere expressies.
Variabelen transformeren
Een mooie mogelijkheid is de transformatie van variabelen. Daarvoor kan het trefwoord set worden gebruikt in combinatie met vlaggen die kunnen worden gebruikt om de waarde te wijzigen voordat deze aan de variabele wordt toegewezen.
- :lower verandert de waarde van een variabele in kleine letters;
- :upper verandert de waarde van een variabele in hoofdletters;
- :lowerfirst verandert de eerste letter van de waarde van de variabele in een kleine letter;
- :upperfirst verandert de eerste letter van de waarde van de variabele in een hoofdletter;
- :quotewildcard plaatst elk jokerteken in de string tussen aanhalingstekens, zodat het letterlijk in een match-instructie kan worden gebruikt;
- :length retourneert de lengte van de waarde.
Let op: u kunt een gedefinieerde variabele ook hergebruiken in een andere set-actie. Laten we onze eerdere voorbeelden verbeteren:
require "variables";
require "fileinto";
# Set labelname to WORK, and modify it to lowercase with the first letter in upper case
set :lower :upperfirst "labelname" "WORK";
set :lower :upperfirst "foldername" "geneva";
# Create a variable that is a combination of foldername and labelname
set "location" "${foldername}/${labelname}";
fileinto "${location}";Stap voor stap maakt het filter drie variabelen aan. De eerste opdracht set maakt de variabele labelname aan. De inhoud van de variabele is Work. De oorspronkelijke waarde WORK wordt namelijk getransformeerd met zowel de vlag :lower als :upperfirst, waardoor de schrijfwijze verandert in work en vervolgens in Work.
De tweede set-opdracht maakt een tweede variabele aan met de naam foldername, die de string Geneva bevat. De vlaggen :lower en :upperfirst zijn hier namelijk voor gebruikt.
Ten slotte wordt de variabele location aangemaakt. De waarde “${foldername}/${labelname}” bevat twee variabelen: foldername en labelname. De Sieve-interpreter zal deze variabelen dus vervangen door hun waarden: Work en Geneva.
Ten slotte wordt de variabele location gebruikt als argument voor de opdracht fileinto. De e-mail wordt dus verplaatst naar de map waarvan de naam de waarde van de variabele location is: Work/Geneva.
De vergelijkers kunnen ook worden toegepast op overeenkomende variabelen:
require "variables";
require "fileinto";
if address :all :matches "from" "*@*" {
set :lower :upperfirst "fileintovar" "${1}";
fileinto "${fileintovar}";
}Hier geldt: als de afzender van de e-mail test@proton.me is, wordt deze gemarkeerd met het label Test.
Een andere manier om de waarde van een variabele te wijzigen, is door de extensie vnd.proton.eval te gebruiken. Deze extensie definieert de nieuwe vlag :eval, waarmee u enkele eenvoudige berekeningen kunt uitvoeren:
require "variables";
require "fileinto";
require "vnd.proton.eval";
# do a match test on the sender address
if header :matches "from" "*" {
# create a variable called length, containing the length of the first
# matching variable
set :length "length" "${1}";
# Create a variable called fileintovar containing the result of the expression written below
set :eval "fileintovar" "${length} * 25 - 1 / 8+3";
fileinto "${fileintovar}";
}In dit voorbeeld, en nog steeds aannemende dat de e-mail afkomstig is van test@proton.me, wordt de e-mail gemarkeerd met de waarde 478. De lengte van de eerste overeenkomende variabele is namelijk 19, en het resultaat van 19 * 25 – 1 / 8 + 3 is naar boven afgerond 478.
Dit lijkt op het eerste gezicht misschien nutteloos, maar deze extensie is logischer in combinatie met andere bewerkingen.
Vergelijking met andere velden in Sieve
Overeenkomen op specifieke headers is ook mogelijk. Om bijvoorbeeld alle berichten die naar lijsten zijn verzonden (vaak zijn dit marketingberichten of nieuwsbrieven) te plaatsen, kunt u het volgende doen:
require "fileinto";
# Filter all lists into the same folder
if exists "list-unsubscribe"
{
fileinto "advertisements";
}Om e-mails van sociale media in hun eigen map te sorteren, kunt u het volgende schrijven:
require "fileinto";
# Filter all lists into the same folder
if anyof(exists "x-facebook", exists "x-linkedin-id") {
fileinto "social";
} elsif exists "list-unsubscribe"
{
fileinto "advertisements";
}Let op dat we dit gebruiken:
anyof(exists "x-facebook", exists "x-linkedin-id")
in plaats van:
exists ["x-facebook", "x-linkedin-id"]
Omdat de laatste optie controleert of zowel x-facebook en x-linkedin-id is ingesteld.
Om daadwerkelijk te zien welke waarde een header bevat, kunt u de header-test gebruiken:
require "fileinto";
# Put all mails that have been sent without TLS/SSL into the same folder
if header :is "x-pm-transfer-encryption" "none" {
fileinto "unencrypted";
}Naast de :is-bewerking, die een exacte overeenkomst oplevert, ondersteunt de header-opdracht ook :matches, die overeenkomt met behulp van jokertekens (bijv. “*@*.com” komt overeen met elk e-mailadres dat eindigt op dot com), en de :contains-opdracht, die controleert of de header een bepaalde string bevat.
Om Sieve-filters te ontwerpen, kan het handig zijn om de headers van een e-mail op te halen. Ga hiervoor in de Proton Mail-webinterface naar Meer (∨) → Headers bekijken. Er wordt een nieuw venster geopend met alle headers van de e-mail.
Filteren op berichtgrootte in Sieve
Het is mogelijk om grote e-mails anders te behandelen dan kleine e-mails. U wilt grote e-mails bijvoorbeeld wellicht markeren, zodat u deze kunt verwijderen om ruimte in uw postvak IN te besparen. Dit kan op de volgende manier worden bereikt:
require ["imap4flags"];
# Flag emails that probably have large attachments (> 2 MiB)
if size :over 2M # you can also use 2097152 if you want, they are synonymous
{
addflag "\\Flagged";
}
# Automatically mark as read really small messages. They can't have much content anyway...
if size :under 1000
{
addflag "\\Seen";
}Zoals u kunt zien, zijn er eenheden beschikbaar als u grote groottes wilt specificeren, door de letter die overeenkomt met de verwachte eenheid direct na het getal toe te voegen. Er zijn drie eenheden beschikbaar: K voor een kibioctet (of 1024 bytes), M voor een mebioctet (of 1 048 576 bytes) en G voor een gibioctet (of 1 073 741 824 bytes).
Let op: “over” betekent in dit geval groter dan, en “under” betekent kleiner dan. Dit betekent dat als een bericht een grootte heeft van exact 1000 bytes, geen van beide
size :under 1000
noch
size :over 1000
zal overeenkomen.
Let op: Sieve-filters hebben geen toegang tot de werkelijke inhoud en tonen alleen de versleutelde grootte.
Geavanceerde acties uitvoeren op berichten
U kunt verschillende reacties op een bericht uitvoeren in Sieve. We hebben de acties fileinto, addflag, discard en reject al in de vorige secties gepresenteerd. Hier zullen we meer geavanceerde acties presenteren.
Vakantieberichten en datumtests
U kunt de functie automatisch antwoord reproduceren in Sieve met behulp van de opdracht vacation. In feite vertrouwt de functie voor automatisch antwoorden in uw instellingen op Sieve om zijn werk te doen. Maar door de vakantie-opties in een script te gebruiken, heeft u veel meer mogelijkheden om uw automatische antwoorden aan te passen. U kunt bijvoorbeeld specifieke berichten afstemmen op basis van voorwaarden. Let op: net als bij de functie voor automatisch antwoorden in de instellingen is de actie vacation alleen beschikbaar bij betaalde abonnementen.
De opdracht vacation stuurt een vakantie-antwoord naar iedereen die contact met u probeert op te nemen. Deze wordt vaak gekoppeld aan de tests currentdate of date om antwoorden binnen een specifiek tijdsbestek te verzenden.
Stel dat ik van 14 juli 2017 tot en met 14 augustus 2017 op vakantie ga, in Colorado-tijd. Ik kan de volgende Sieve-code gebruiken om een autoresponder in te stellen:
require ["date", "vacation", "relational"];
if allof(currentdate :zone "US/Mountain" :value "ge" "date" "2017-07-14",
currentdate :zone "US/Mountain" :value "le" "date" "2017-08-14")
{
vacation "Queue you guys, I'm going on vacation.";
}Een van de optionele argumenten voor een vacation-opdracht zijn de argumenten :handle en :days. Sieve zal standaard niet meerdere keren binnen een specifiek aantal dagen (de zogenaamde time-out) antwoorden naar dezelfde afzender. Dit voorkomt dat u onbedoeld talloze automatische e-mails verzendt.
Om de time-out te beheren, kunt u de parameter :days gebruiken. Het argument :days wordt gebruikt om de periode te specificeren waarin adressen worden bewaard en niet worden beantwoord, en wordt altijd in dagen gespecificeerd. Soms heeft u meerdere vacation-opdrachten in uw Sieve-script en moet u ervoor zorgen dat elk daarvan ten minste eenmaal een antwoord verzendt (als de regel overeenkomt). In dat geval kan de optie :handle worden gebruikt. Het argument voor :handle is een string die het type antwoord identificeert dat wordt verzonden.
Om te zien hoe dit werkt, stel dat u een docent bent. Docenten ontvangen huiswerkopdrachten vaak per e-mail. Het is handig om deze in hun eigen map te sorteren. Bovendien kunt u inzendingen die na de deadline binnenkomen afwijzen.
In een dergelijk geval wilt u wellicht handle gebruiken om ervoor te zorgen dat antwoorden worden verzonden wanneer dat nodig is:
require ["date", "vacation", "reject", "fileinto", "relational"];
if header :contains "subject" "Homework assignment 1"
{
# remind people not to forget the attachments
if size :under 5000
{
vacation :handle "Homework assignment 1 - missing attachment" "Your message size is really low. Please make sure you didn't forget to add the homework as an attachment.";
}
# check if the student made the deadline
if currentdate :zone "US/Mountain" :value "le" "date" "2017-06-12"
{
fileinto "Homework Assignment 1";
} else {
reject "Too late, you missed the deadline.";
}
}
if header :contains "subject" "Homework assignment 2"
{
# remind people not to forget the attachments
if size :under 5000
{
vacation :handle "Homework assignment 2 - missing attachment" "Your message size is really low. Please make sure you didn't forget to add the homework as an attachment.";
}
# check if the student made the deadline
if currentdate :zone "US/Mountain" :value "le" "date" "2017-06-12"
{
fileinto "Homework Assignment 2";
} else {
reject "Too late, you missed the deadline.";
}
}Hier zijn alle argumenten die zijn toegestaan voor het vakantie-antwoord, vermeld in de volgorde waarin de argumenten moeten worden doorgegeven:
- :days is het aantal dagen dat de autoresponder moet wachten met het verzenden van een antwoord naar dezelfde afzender na het verzenden van een vakantiebericht
- :subject is een voorvoegsel (standaard auto) dat de autoresponder moet gebruiken om de afzender te beantwoorden. Bijvoorbeeld: “Homework Assignment 2” ontvangt een antwoord met “late: Homework Assignment 2” als :subject “late” wordt doorgegeven.
- :mime geeft aan dat de eerste regel van het antwoord een specifieke indeling gebruikt. Hiermee kan de afzender antwoorden met html-berichten. Om bijvoorbeeld een html-antwoord te schrijven, geeft u het argument :mime door en schrijft u op de eerste regel van het antwoord Content-Type : text/html.
- :handle is een string die het type antwoord identificeert dat wordt verzonden.
Let op: de parameter :zone in currentdate is een optionele parameter en zal de lokale tijd van de server (Genève, Zwitserland, in het geval van Proton Mail) gebruiken als deze niet is ingesteld.
De zoneparameter accepteert tijdzoneverschillen, dit zijn strings in de vorm “+0100” wat UTC+1 betekent, en feitelijke tijdzones in de ICANN-database (zie https://en.wikipedia.org/wiki/List_of_tz_database_time_zones(nieuw venster)). De laatste optie is vaak nuttiger (hoewel deze niet-standaard is voor Sieve) omdat deze ook de zomertijd van elke tijdzone codeert.
U kunt datums vergelijken met behulp van de normale parameter :is/ :contains/ :matches. Zo komt de volgende Sieve-opdracht bijvoorbeeld overeen met elke datum in juli 2017:
currentdate :zone "US/Mountain" :matches "date" "2017-07-??"
Maar in de meeste gevallen is de parameter :value veel nuttiger.
De laatste parameter die u moet doorgeven is de indeling. De indeling codeert ook welk deel van de datum u wilt vergelijken. In het gegeven voorbeeld hebben we de datumnotatie gebruikt. Alle ondersteunde indelingen zijn:
- year, het jaar gecodeerd in de indeling “0000” tot “9999”
- month, de maand gecodeerd als “01” tot “12”
- day, de dag gecodeerd als “01” tot “31”
- date, gecodeerd als yyyy-mm-dd
- hour, het uur gecodeerd als “00” tot “23”
- minute, de minuut gecodeerd als “00” tot “59”
- second, de seconde gecodeerd als “00” tot “60” (60 is een schrikkelseconde(nieuw venster), die alleen optreedt om 23:59:60 wanneer wetenschappers dit nodig achten)
- time, de tijd als hh:mm:ss
- iso8601, de datum en tijd volgens de ISO8601-standaard, bijvoorbeeld: 2005-08-15T15:52:01+00:00
- std11, de datum en tijd volgens de RFC2822-standaard, bijvoorbeeld: Mon, 15 Aug 2005 15:52:01 +0000
- zone, het tijdzoneverschil in de indeling +/-zzzz, bijvoorbeeld +0000 of -1200
- julian, het aantal dagen sinds 17 november 1858 UTC
- weekday, de dag van de week beginnend bij zondag als 0 tot en met zaterdag als 6
Ten slote is het ook mogelijk om de datum uit een header op te halen in plaats van currentdate te gebruiken. Deze datumopdracht werkt op dezelfde manier als currentdate, behalve dat deze een extra string vereist vóór de indelingsstring: de headernaam. Bijvoorbeeld:
date :zone "US/Mountain" :matches "received" "date" "2017-07-??"
Let op: de headers zijn niet noodzakelijkerwijs nauwkeurig: een afzender kan ze naar eigen goeddunken wijzigen en ze zijn daarom niet betrouwbaar.
Overwegingen:
- De autoresponder reageert niet op automatisch gegenereerde berichten zoals mailinglijsten, e-mails die door een andere autoresponder zijn verzonden of berichten die zijn verzonden vanaf een noreply-adres.
- De autoresponder verzendt berichten niet meerdere keren naar hetzelfde e-mailadres, behalve wanneer de vacation-opdracht een andere :handle heeft.
Verloop beheren
Een unieke functie van Proton Mail is de mogelijkheid om een verloopdatum in te stellen voor verzonden berichten, waarna het bericht uit de postvak IN van de ontvanger wordt verwijderd.
U kunt deze functie ook gebruiken om uw inkomende berichten te beheren door een verloopdatum toe te voegen:
require "vnd.proton.expire"; # permanently delete all incoming and outgoing emails after 10 days expire "day" "10";
Het bovenstaande script verwijdert alle ontvangen e-mails na 10 dagen. Dit is een beetje extreem, omdat het op alle e-mails van toepassing is. In plaats daarvan zou u waarschijnlijk een voorwaarde moeten gebruiken om het script alleen op een specifieke set e-mails toe te passen. U zou bijvoorbeeld elk bericht kunnen laten verlopen van iemand die niet in uw contacten staat:
require ["extlists", "vnd.proton.expire"];
# permanently delete after 10 days any email not from me or from someone in my address book.
if not anyof(
header :list "from" ":addrbook:personal",
header :list "from" ":addrbook:myself"
) {
expire "day" "10";
}Let op: als de gespecificeerde verloopdatum de 730 dagen overschrijdt, wordt deze automatisch beperkt tot 730 dagen.
Beperkingen van Sieve
Er zijn verschillende Sieve-beperkingen waar u rekening mee moet houden.
- Verzonden berichten kunnen niet handmatig of via een filter worden verplaatst naar Postvak in/Concepten. Ze blijven altijd in de map Verzonden staan, samen met de mappen/labels die door de gebruiker of het filter zijn toegepast.
- Ontvangen berichten kunnen niet handmatig of via een filter worden verplaatst naar Concepten/Verzonden.
- Concepten kunnen niet handmatig of via een filter worden verplaatst naar Postvak in/Verzonden.
- Voor berichten in Spam — of berichten die tijdens de verwerking in spam zijn geplaatst — verzenden we geen automatische antwoorden/afwezigheidsberichten. Als u een dergelijke functie nodig heeft, kunt u overwegen een aangepaste map toe te voegen — bijvoorbeeld mySpam — en de meldingen hiervoor uit te schelen.
- Beperkingen van automatische antwoorden/afwezigheidsberichten
Opmerking over ondersteuning van reguliere expressies
Protons implementatie van Sieve volgt de Sieve-standaard voor e-mailfiltering, die slechts minimale ondersteuning voor reguliere expressies bevat. Sommige veelvoorkomende verkorte syntaxen voor reguliere expressies, zoals \b (woordgrens), \w (woordteken), \W (niet-woordteken) en \d (cijfer), worden niet ondersteund in Sieve. Als gevolg hiervan kan het gebruik van deze verkorte tekens in filters ertoe leiden dat ze onopgemerkt mislukken. Deze beperking is te wijten aan de Sieve-standaard zelf, die prioriteit geeft aan eenvoud en compatibiliteit tussen platforms. Raadpleeg de Sieve Regular Expressions Draft RFC voor alle details.
Lijst met ondersteunde acties en tests
Pakketten
Sieve ondersteunt de volgende extensies. U kunt de officiële documentatie raadplegen voor meer informatie.
Datum
- Gebruik: date
- Beschrijving: (nieuw venster)Biedt een manier om datumgegevens te controleren.
- Documentatie: https://tools.ietf.org/html/rfc5260(nieuw venster)
- Implementatie: De standaard comparator is i;ascii-numeric en niet i;ascii-casemap. Inderdaad, date is niet nuttig met de casemap comparator.
- Zie: Afwezigheidsberichten en datumtests
Envelope
- Gebruik: envelope
- Beschrijving: (nieuw venster)Definieert tests rond de SMTP-envelope van het bericht.
- Documentatie: https://tools.ietf.org/html/rfc5228#section-5.4(nieuw venster)
- Zie: Vergelijking met adressen in Sieve
FileInto
- Gebruik: fileinto
- Beschrijving: Past een label toe op een bericht of verplaatst het naar een map.
- Documentatie: https://tools.ietf.org/html/rfc5228#section-4.1(nieuw venster)
- Implementatie: Schuine strepen geven het volledige pad van de mappen aan en ze moeten worden geëscaped als een labelnaam een schuine streep bevat. De volgende opties worden ondersteund:
- “Work“: dit is het label of de map genaamd ‘Work’
- “Work/Project1“: dit is de submap ‘Project1’ die zich in de map ‘Work’ bevindt
- “Work/Project1/Docs“: dit is de submap ‘Docs’ die zich in de submap ‘Project1’ bevindt, die zich in de map ‘Work’ bevindt
- “Work/Misc\\/Others“: dit is de submap ‘Misc/Others’ die zich in de map ‘Work’ bevindt
- Zie: Aan de slag
Imap4flags
- Gebruik: imap4flags
- Beschrijving: Past een vlag toe op een bericht.
- Documentatie: https://tools.ietf.org/html/rfc5232(nieuw venster)
- Implementatie: Parameters voor variabelenlijsten worden niet ondersteund. Gebruik in plaats daarvan de extensie variables.
- Zie: Aan de slag
Reject
- Gebruik: reject
- Beschrijving: Wijst een bericht af met een specifiek bericht.
- Documentatie: https://tools.ietf.org/html/rfc5429(nieuw venster)
- Zie: Aan de slag
Vacation
- Gebruik: vacation
- Beschrijving: Verzendt een automatisch antwoordbericht.
- Documentatie: https://tools.ietf.org/html/rfc5230(nieuw venster)
- Zie: Afwezigheidsberichten en datumtests
Variables
- Gebruik: variables
- Beschrijving: Maakt en gebruikt variabelen.
- Documentatie: https://tools.ietf.org/html/rfc5229(nieuw venster)
- Zie: Variabelen aanmaken
Relationeel
- Gebruik: relationeel
- Beschrijving: Biedt relationele match-operatoren.
- Documentatie: https://tools.ietf.org/html/rfc5231
Regex
- Gebruik: regex
- Beschrijving: Biedt de regex-matchoperatoren.
- Documentatie: https://tools.ietf.org/id/draft-ietf-sieve-regex-01.html
Ascii numerieke comparator
- Gebruik: comparator-i;ascii-numeric
- Beschrijving: Biedt getalsvergelijking.
- Documentatie: https://tools.ietf.org/html/rfc5231(nieuw venster)
Extern opgeslagen lijsten
- Gebruik: extlists
- Beschrijving: Biedt toegang tot contactlijsten.
- Documentatie: https://tools.ietf.org/html/rfc6134(nieuw venster)
- Implementatie: De volgende lijsten worden ondersteund
- addrbook:personal : Persoonlijke contactlijst. De volgende zoekopdrachten worden ondersteund:
- label[.starts-with / .ends-with / .contains]=<groep: string>: bewerking op een contactgroep;
- keypinning=<waarde: true / false> definitie van de openbare sleutel van de contactpersoon;
- encryption=<waarde: true / false> standaardversleuteling van de contactpersoon;
- signing=<waarde: true / false> standaardhandtekening van de contactpersoon.
- :addrbook:myself Adressen die toebehoren aan de huidige gebruiker;
- :addrbook:organization Adressen die toebehoren aan de leden van de huidige organisatie;
- :incomingdefaults:inbox Acceptatielijst
- :incomingdefaults:spam Blokkeringslijst
- addrbook:personal : Persoonlijke contactlijst. De volgende zoekopdrachten worden ondersteund:
- Zie: Toegang krijgen tot uw contactlijst
Eval
- Gebruik: vnd.proton.eval
- Beschrijving: Evalueert een eenvoudige rekenkundige functie in een string.
- Documentatie: Variabelen transformeren
Include
- Gebruik: include
- Beschrijving: Beheert de Sieve-workflow.
- Documentatie: https://tools.ietf.org/html/rfc6609(nieuw venster)
- Implementatie: Alleen de return-node wordt ondersteund.
Verloopdatum
- Gebruik: vnd.proton.expire
- Beschrijving: Beheert de verloopdatum van berichten.
- Documentatie: Verloopdatum beheren
Tests
Huidige datum
- Gebruik:
currentdate [":zone" <time-zone: string>] [COMPARATOR] [MATCH-TYPE] <date-part: string> <key-list: string-list>
- Beschrijving: Voert een test uit met de huidige datum op de Proton Mail-server
- Pakket: date
- Zie: Lijst met ondersteunde acties en tests
Datum
- Gebruik:
date [":zone" <time-zone: string> / ":originalzone"] [MATCH-TYPE] <header-name: string> <date-part: string> <key-list: string-list
- Beschrijving: Voert een test uit met de datum die wordt beschreven door een header.
- Pakket: date
- Zie: Lijst met ondersteunde acties en tests
HasFlag
- Gebruik:
hasflag [MATCH-TYPE] [COMPARATOR] <list-of-flags: string-list>
- Beschrijving: Controleert of een bepaald bericht een bepaalde vlag heeft.
- Pakket: imap4flags
- Zie: Aan de slag
Envelope
- Gebruik:
envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <envelope-part: string-list> <key-list: string-list>
- Beschrijving: Controleert of het opgegeven deel van de SMTP-envelope overeenkomt met de opgegeven sleutel.
- Pakket: envelope
- Zie: Vergelijking met adressen in Sieve – Geavanceerd
Adres·
- Gebruik:
address [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <header-list: string-list> <key-list: string-list>
- Beschrijving: Controleert of de opgegeven header(s), verwerkt als adres, overeenkomt/overeenkomen met de opgegeven sleutel(s).
- Pakket: <standaard>
- Zie: Vergelijking met adressen in Sieve
Header
- Gebruik:
header [COMPARATOR] [MATCH-TYPE] <header-names: string-list> <key-list: string-list>
- Beschrijving: Controleert of de opgegeven header(s) overeenkomt/overeenkomen met de opgegeven sleutel(s).
- Pakket: <standaard>
- Zie: Vergelijking met andere velden in Sieve
HasExpiration
- Gebruik:
hasexpiration
- Beschrijving: Controleert of er voor een bericht een verlooptijd is ingesteld.
- Pakket: vnd.proton.expire
Exists
- Gebruik:
exists <header-names: string-list>
- Beschrijving: Controleert of (alle) opgegeven header(s) bestaan.
- Pakket: <standaard>
- Zie: Vergelijking met andere velden in Sieve
Verloopdatum
- Gebruik:
expiration :comparator "i;ascii-numeric" [MATCH-TYPE] <unit: "day" / "minute" / "second"> <key-list: string-list>
- Beschrijving: Vergelijkt de verlooptijd van het bericht met de opgegeven sleutel(s). De test mislukt als deze wordt uitgevoerd op een niet-verlopend bericht.
- Pakket: vnd.proton.expire
Size
- Gebruik:
size <":over" / ":under"> <limit: number>
- Beschrijving: Controleert of de totale grootte van het bericht (inclusief bijlagen) boven of onder een bepaalde limiet ligt.
- Pakket: <standaard>
- Zie: Filteren op berichtgrootte in Sieve
String
- Gebruik:
string [MATCH-TYPE] [COMPARATOR] <source: string-list> <key-list: string-list>
- Beschrijving: Evalueert of een van de brontekenreeksen overeenkomt met een van de sleutels.
- Pakket: variables
Anyof
- Gebruik:
anyof <tests: test-list>
- Beschrijving: Voert een logische OF-bewerking uit op de opgegeven tests.
- Pakket: <standaard>
- Zie: Aan de slag
Allof
- Gebruik:
allof <tests: test-list>
- Beschrijving: Voert een logische EN-bewerking uit op de opgegeven tests.
- Pakket: <standaard>
- Zie: Aan de slag
Not
- Gebruik:
not <test: test>
- Beschrijving: Inverteert het resultaat van de opgegeven test.
- Pakket: <standaard>
- Zie: Aan de slag
True
- Gebruik:
true
- Beschrijving: Komt altijd overeen.
- Pakket: <standaard>
False
- Gebruik:
false
- Beschrijving: Komt nooit overeen.
- Pakket: <standaard>
Acties
Require
- Gebruik:
require <packages: string-list>
- Beschrijving: Laadt een opgegeven extensie zodat de methoden of wijzigingen ervan kunnen worden gebruikt.
- Pakket: <standaard>
- Zie: Aan de slag
FileInto
- Gebruik:
fileinto <folder: string>
- Beschrijving: Verplaatst het bericht dat wordt verwerkt naar een bepaalde map.
- Pakket: fileinto
- Zie: Aan de slag
Addflag
- Gebruik:
addflag <list-of-flags: string-list>
- Beschrijving: Voegt de opgegeven vlag toe aan het bericht dat wordt verwerkt.
- Pakket: imap4flags
- Zie: Aan de slag
Removeflag
- Gebruik:
removeflag <list-of-flags: string-list>
- Beschrijving: Verwijdert de opgegeven vlaggen uit het bericht dat wordt verwerkt.
- Pakket: imap4flags
Setflag
- Gebruik:
setflag <list-of-flags: string-list>
- Beschrijving: Verwijdert alle vlaggen en stelt de opgegeven vlaggen in op het bericht dat wordt verwerkt.
- Pakket: imap4flags
Stop
- Gebruik:
stop
- Beschrijving: Stopt de verwerking van alle Sieve-filters. Achtereenvolgende Sieve-filters zullen niet worden uitgevoerd.
- Pakket: <standaard>
Return
- Gebruik:
return
- Beschrijving: Stopt de verwerking van het huidige Sieve-filter. Achtereenvolgende Sieve-filters zullen nog wel worden uitgevoerd.
- Pakket: include
Set
- Gebruik:
set [MODIFIER] <name: string> <value: string>
- Beschrijving: Maakt nieuwe variabelen aan die de opgegeven naam en de opgegeven waarde aan elkaar koppelen.
- Pakket: variables
- Zie: Variabelen aanmaken
Discard
- Gebruik:
discard
- Beschrijving: Gooit het bericht aan het einde van dit Sieve-filter weg. Na het weggooien zullen er geen andere Sieve-filters worden uitgevoerd.
- Pakket: <standaard>
Keep
- Gebruik:
keep
- Beschrijving: Draait de laatste discard-opdracht terug. Dit heeft alleen effect als het zich in hetzelfde Sieve-filter bevindt. Als er geen discard is uitgevoerd, doet dit niets.
- Pakket: <standaard>
Reject
- Gebruik:
reject <reason: string>
- Beschrijving: Verstuurt een e-mail naar het SMTP-adres van de afzender met de reden en gooit dit bericht onmiddellijk weg. De keep-opdracht zal deze actie niet annuleren.
- Pakket: <standaard>
- Zie: Aan de slag, Vakantieberichten en datumtests
Expire
- Gebruik:
expire <unit: "day" / "minute" / "second"> <value: string>
- Beschrijving: Laat een bericht na de opgegeven tijd verlopen.
- Pakket: vnd.proton.expire
- Zie: Verloop beheren
Unexpire
- Gebruik:
unexpire
- Beschrijving: Verwijdert de verlooptijd van een bericht.
- Pakket: vnd.proton.expire
Vacation
- Gebruik:
vacation [":days" number] [":subject" string] [":mime"] [":handle" string] <reason: string>
- Beschrijving: Verstuur een automatisch antwoord naar het SMTP-adres van de afzender met de opgegeven reden als de hoofdtekst.
- Pakket: vacation (vereist een betaald account)
- Zie: Vakantieberichten en datumtests
Geldige externe lijst
- Gebruik:
valid_ext_list <ext-list-names: string-list>
- Beschrijving: Test of alle opgegeven externe lijsten worden ondersteund en geldig zijn.
- Pakket: extlists



