Sieve-Filter (erweiterte benutzerdefinierte Filter)
- Lesen
- 38 Min.
- Kategorie
- E-Mails erhalten und lesen
Proton Mail bietet Benutzern verschiedene Möglichkeiten, E-Mails durch Zuweisen von Kategorien oder Sortieren in Ordner automatisch zu filtern. Im Allgemeinen gibt es drei Methoden:
- Das Hinzufügen von Absendern zur Sperrliste und zu Freigabelisten , sodass sie immer oder nie in den Spam-Ordner verschoben werden;
- Das Erstellen eines benutzerdefinierten Filters über die interaktive Benutzeroberfläche von Proton Mail;
- [Am weitesten fortgeschritten] Erstellen eines benutzerdefinierten Filters in Sieve.
Unter diesen Methoden bietet das Erstellen eines benutzerdefinierten Filters in Sieve die größte Vielseitigkeit, ist aber auch komplizierter zu verwenden. Aus diesem Grund betrachten wir Sieve als eine erweiterte Funktion für Benutzer mit einer gewissen technischen Erfahrung. Für die meisten Benutzer ist die interaktive Benutzeroberfläche geeignet, um die benutzerdefinierten Filter zu erstellen, die du brauchst.
Inhaltsverzeichnis
Was ist Sieve?
Sieve ist eine Programmiersprache, die zum Filtern von E-Mails verwendet wird. Du kannst Filter in Sieve erstellen, indem du einfache Regeln schreibst. Beispielsweise: „Gib allen Nachrichten von Kyle die grüne Kategorie“. Durch das Kombinieren dieser Regeln kann ein hochentwegtes Filtersystem entstehen.
Du kannst Sieve-Regeln von Grund auf selbst schreiben, sie aus Beispielen wie denen in diesem Artikel übernehmen oder Software verwenden, die es einfacher macht.
Tatsächlich bieten wir dir bereits eine Möglichkeit, Sieve-Filter über die interaktive Benutzeroberfläche zu erstellen, die deine Eingaben nutzt, um Sieve-Filter zu erzeugen. Eine weitere gute Möglichkeit, Sieve zu lernen, besteht darin, Filter über die interaktive Benutzeroberfläche zu erstellen und die Filter in Sieve zu bearbeiten, da die interaktive Benutzeroberfläche selbst eine Teilmenge von Sieve verwendet.
Vergleiche zum Beispiel den folgenden Filter, der über die interaktive Benutzeroberfläche erstellt wurde…
… mit dem Code für denselben Filter, der im Sieve-Editor angezeigt wird:
Dieser Artikel führt dich in Sieve ein und erklärt, wie du deine eigenen Sieve-Filter schreibst. Wenn du weitere Informationen zur Verwendung von Sieve benötigst, gibt es online zahlreiche andere Anleitungen, die helfen können. Wenn du Fragen zu Sieve in Proton Mail hast, die auf dieser Seite nicht beantwortet werden, kannst du dich jederzeit hier an unser Support-Team wenden.
Erste Schritte
Um mit dem Erstellen von Sieve-Filtern zu beginnen, melde dich bei mail.proton.me(neues Fenster) an und gehe zu Einstellungen → Alle Einstellungen → Proton Mail → Filter → Sieve-Filter hinzufügen.
Ein Sieve-Skript besteht aus einer Liste von Befehlen. Bei den meisten Skripten beginnt es mit einem require-Befehl. Der require-Befehl lädt eine Erweiterung, die eine bestimmte Funktionalität bereitstellt. Um beispielsweise eine Kategorie zuzuweisen oder eine Nachricht in einen Ordner zu verschieben, benötigen wir den fileinto-Befehl.
Um diesen Befehl zu laden, schreiben wir einfach:
require "fileinto";
Um mehrere Erweiterungen zu laden, kannst du eine Liste verwenden:
require ["fileinto", "imap4flags"];
In diesem Fall lädt imap4flags eine Erweiterung, mit der du E-Mails als gelesen markieren kannst. Nach dem require-Befehl wirst du oft einige Tests an der eingehenden Nachricht durchführen. Dies geschieht durch die Kombination von if und einem anderen Befehl wie address oder header.
Schließlich kannst du, wenn die Tests erfolgreich sind, eine Aktion auf eine Nachricht anwenden. Angenommen, wir möchten alle E-Mails von einem bestimmten Absender in denselben Ordner verschieben und die eingehende E-Mail als gelesen markieren. Dies könnte wie folgt geschrieben werden:
require ["fileinto", "imap4flags"];
# I don't really like Spott
if address :is "from" "Spott.Tenerman@northpark.example.com"
{
addflag "\\Seen";
fileinto "enemies";
}Beachte, dass das # -Zeichen einen Kommentar anzeigt und nicht als Teil des Sieve-Skripts interpretiert wird. Außerdem muss der Ordner oder die Kategorie, die du festlegst (hier enemies ), in deiner Umgebung vorhanden sein: Wie du Ordner und Kategorien erstellst, erfährst du hier. Klicke nach der Eingabe dieses Filters auf die Schaltfläche SPEICHERN. Dein Filter wird nun für jede eingehende E-Mail ausgeführt.
Natürlich möchtest du vielleicht E-Mails von mehreren Absendern in denselben Ordner verschieben. In diesem Fall kannst du eine Liste von Strings an den Address-Befehl übergeben (ein String(neues Fenster) ist eine Zeichenkette, in diesem Fall eine E-Mail-Adresse):
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";
}Beachte, dass es normalerweise auch möglich ist, eine Liste zu übergeben, wann immer du einen String an eine Testbedingung übergeben kannst. Es wird dann versucht, eine Übereinstimmung zu finden, indem jeder der Strings in der Liste ausprobiert wird. Dies gilt nicht für Befehle wie fileinto, addflag usw.
But Sieve kann noch mehr als nur dein Postfach neu zu ordnen. Es ermöglicht dir auch, E-Mails mit einer Antwortnachricht abzulehnen:
require "reject";
# Reject mails that spell my name wrong
if header :contains "subject" "Kyhel"
{
reject "My name is not Kyhel";
}Tests verwenden
Tests in Sieve kombinieren
Wie wir dir im Abschnitt Erste Schritte gezeigt haben, kannst du mithilfe des if-Befehls Tests an eingehenden Nachrichten durchführen, um festzulegen, ob eine E-Mail von einem require-Befehl betroffen sein soll.
Zusätzlich zum if-Befehl gibt es weitere Testbefehle, mit denen du dein Skript auf einfache Weise strukturieren kannst.
Else
Der else-Befehl ermöglicht es dir, etwas auszuführen, wenn der if-Befehl seine Aktionen nicht ausgeführt hat. Ein Beispiel hierfür ist:
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 wird die E-Mail in den Ordner Kenny verschoben, wenn der Betreff genau mmph mmph lautet. Im anderen Fall (also wenn der Betreff nicht genau mmph mmph lautet) wird die E-Mail in den Ordner Understandable verschoben.
Elsif
Das elsif ist die Zusammenziehung von else if. Wie der else-Befehl wird es ausgeführt, wenn die if-Bedingung nicht zutrifft, aber nur, wenn die elsif-Bedingung zutrifft. Wenn elsif nicht zutrifft, wird der nächste elsif– oder else-Block ausgeführt.
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";
}Beachte, dass in einem einzelnen Durchlauf nur einer der Blöcke if, elsif oder else ausgeführt wird.
Anyof
Manchmal musst du einen Befehl ausführen, wenn einer von mehreren Tests erfolgreich ist. Dafür kannst du den Befehl anyof verwenden. Dies geschieht, indem du anyof gefolgt von einer öffnenden Klammer „(“, den zu testenden Anweisungen getrennt durch Kommas und einer schließenden Klammer „)“ schreibst.
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";
}Dieses Skript verschiebt Nachrichten, die von kenny@northpark.example.com stammen oder mmph mmph in der Betreffzeile enthalten, in den Ordner Kenny.
Allof
Das Gegenstück zu anyof gibt es ebenfalls: allof. Dies ermöglicht es dir, einen Befehl nur dann auszuführen, wenn alle angegebenen Bedingungen erfüllt sind:
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";
}
Dieses Skript verschiebt Nachrichten, die von kenny@northpark.example.com stammen und mmph mmph in der Betreffzeile enthalten, in den Ordner Kenny.
Nicht
Schließlich musst du manchmal einen Befehl anwenden, wenn etwas nicht übereinstimmt. Wenn du ein not vor die Anweisung setzt, wird genau das sichergestellt:
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";
}Was gleichbedeutend ist mit:
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";
}Dies verschiebt alle E-Mails, die kein „real guitar“ in der Betreffzeile enthalten, in den Ordner Young people.
Es ist natürlich möglich, all diese Tests miteinander zu kombinieren. Beispielsweise möchtest du vielleicht eine E-Mail markieren, wenn sie sowohl nicht von Kenny stammt als auch kein mmph mmph im Betreff enthält:
require ["fileinto", "imap4flags"];
if not anyof ( header :contains "subject" "mmph mmph",
address :is "from" "Kyhel.Broski@northpark.example.com" ) {
addflag "\\Flagged";
}Tests an Kopfzeilen durchführen
Mit dem Befehl address kannst du Tests an Adresskopfzeilen wie den Kopfzeilen from, to und sender durchführen. Du kannst verschiedene Teile der E-Mail-Adresse extrahieren, indem du eines der folgenden Flags verwendest:
- :localpart — der Teil vor dem At-Zeichen (@)
- :domain — der Teil nach dem At-Zeichen (@)
- :all — die gesamte Adresse
Das folgende Snippet erklärt die Verwendung dieses Befehls:
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";
}Zusammenfassend verschiebt dieses Skript alles, was von der Domain northpark.example.com gesendet wurde, nach PaperPeople und von springfield.example.com nach YellowPeople.
Darüber hinaus wird die Nachricht markiert, wenn der Teil vor dem @ gleich chef ist (z. B. chef@example.com), unabhängig davon, von welcher Domain eine E-Mail gesendet wird. Eine weitere interessante Anwendung ist das automatische Speichern von allem, was an eine bestimmte Adresse gesendet wird, in einem Ordner:
require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :localpart "to" "support"
{
fileinto "Support";
}Erweitert
Der Befehl envelope ermöglicht es dir, weitere Tests durchzuführen. Im Allgemeinen ruft der Test address nur den Wert aus der Kopfzeile ab. In der SMTP-Sitzung kann man jedoch eine andere from-Adresse angeben als die in der Kopfzeile.
In der Kopfzeilen-Benutzeroberfläche von Proton Mail entspricht „envelope-from“ der Kopfzeile return-path und „envelope-to“ der Kopfzeile x-original-to.
Mit dem Befehl envelope kannst du die tatsächlichen Adressen für to: und from: aus dem Umschlag (Envelope) abrufen. Beachte, dass keine anderen Felder als diese beiden existieren, sodass sender in diesem Befehl nicht vorhanden ist. Bitte beachte, dass envelope eine Erweiterung ist und du diese Erweiterung daher zuerst mit require einbinden musst.
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";
}Verwendung von Komparatoren zur Bewertung zweier Werte
Wenn ein Test zwei Werte bewertet, ist es möglich, mithilfe verschiedener Flags namens comparators (Komparatoren) festzulegen, wie dieser Vergleich durchgeführt wird. Zuvor haben wir bereits zwei Komparatoren verwendet: :is und :contains, die prüfen, ob die angegebene Zeichenkette genau mit dem spezifischen Wert übereinstimmt bzw. ob der spezifische Wert die angegebene Zeichenkette enthält, wie im folgenden 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";
}Der Komparator :matches kann auch verwendet werden, um ein spezifischeres Format zu definieren. Er vergleicht beide Werte vom Anfang bis zum Ende, genau wie der Komparator :is. Im Fall von :matches kann der von dir definierte Wert jedoch die Werte ? und * enthalten. Das Fragezeichen entspricht einem einzelnen Zeichen, und das Sternchen (auch Platzhalter genannt) entspricht null oder mehr Zeichen.
Mit diesem Format kannst du diesen Test erstellen:
require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph*" {
addflag "\\Flagged";
}In diesem Beispiel ist der Test erfolgreich, wenn der Betreff der Nachricht mit mmph beginnt und danach ein oder mehrere beliebige Zeichen enthält. Mit anderen Worten: Die E-Mail wird markiert, wenn der Betreff mit „mmph“ beginnt. „mmph mmph“ und „mmph mmph Hello“ stimmen beide überein; „Hello mmph“ und „Springfield sales“ dagegen nicht.
Das Sternchen kann auch in der Mitte des Wertes und mehrmals verwendet werden, und zwar wie folgt:
require ["fileinto", "imap4flags"];
if header :matches "subject" "mmph *mmph *mmph" {
addflag "\\Flagged";
}Dieser Test ist erfolgreich, wenn der Betreff mit „mmph “ (mit Leerzeichen) beginnt, ein weiteres „mmph “ (mit Leerzeichen) enthält und mit „mmph“ (ohne Leerzeichen) endet. Passende Betreffe sind „mmph mmph mmph“, „mmph mmph mmphmmph“ oder „mmph is mmph and mmph“.
Dieser :matches-Komparator kann bei Adressvergleichen sehr nützlich sein. Wie du vielleicht weißt, hat Proton Mail mehrere Domains: protonmail.com und proton.me. Wenn du überprüfen möchtest, ob eine Nachricht von einem Proton Mail-Benutzer stammt, kannst du dieses Skript verwenden:
require ["fileinto", "imap4flags"];
# Put support mail in a separate organized folder
if address :domain :matches "from" "protonmail.*"
{
fileinto "Internal";
}Wenn du aus irgendeinem Grund genau das Zeichen * oder ? abgleichen musst, kannst du diese maskieren (quote), indem du \\ voranstellst: \\* entspricht einem Sternchen und \\? entspricht einem Fragezeichen.
Beachte, dass wir auch die Regex-Erweiterung unterstützen, die ebenfalls den Komparator :regex definiert. Dieser Komparator ist eine präzisere Version von :matches, ist jedoch sehr komplex. Für weitere Informationen lies bitte die offizielle Dokumentation(neues Fenster).
In einigen Fällen (wie du im weiteren Verlauf dieses Artikels sehen wirst) möchtest du vielleicht numerische Werte vergleichen. Das Paket relational ist für diese Verwendung gedacht. Das Paket definiert den Komparator :value, auf den der Vergleichstyp folgt.
Es ermöglicht dir zu überprüfen, ob ein Wert größer als (wobei der Vergleichstyp „gt“ ist), größer oder gleich („ge“), gleich („eq“), kleiner oder gleich („le“) oder kleiner („lt“) als der angegebene Wert ist.
Beim Vergleich von numerischen Werten ist das Paket comparator-i;ascii-numeric ebenfalls sehr nützlich. Es teilt dem Skript-Interpreter mit, dass der Inhalt der Zeichenkette eine Zahl und keine reguläre Zeichenkette ist. Es kann verwendet werden, indem man dem Test :comparator “i;ascii-numeric” hinzufügt.
Mit all diesen Informationen können wir das folgende Skript erstellen:
require ["fileinto", "relational", "comparator-i;ascii-numeric"];
if header :value "ge" :comparator "i;ascii-numeric" "subject" "2"
{
fileinto "Dummy example";
}Dieser Test verschiebt die Nachricht in den Ordner Dummy-Beispiel, wenn der Betreff größer oder gleich 2 ist. Wenn der Betreff keine Zahl, sondern ein Text ist, schlägt der Test fehl. Als solches sieht dieses Beispiel sehr unbedeutend aus, aber es ist für die Verwendung in Kombination mit anderen Erweiterungen wie date (Datum) gedacht, die wir später in diesem Artikel definieren werden.
Vergleich unter Verwendung des Kontexts in Sieve
Du kannst mithilfe von Erweiterungen auch auf Informationen zu deinem Konto und dem Proton Mail-Kontext im Allgemeinen zugreifen. Du kannst beispielsweise überprüfen, ob sich die Absenderadresse in deiner Kontaktliste befindet.
Zugriff auf deine Kontaktliste
Du kannst mithilfe der Erweiterung extlists auf deine Kontaktliste zugreifen. In Kombination mit den Kopfzeilentests kannst du dann prüfen, ob sich ein Kontakt in deiner Kontaktliste befindet.
require ["fileinto", "extlists"];
# Checks that the sender is in your personal address book
if header :list "from" ":addrbook:personal?label=Family"
{
fileinto "Known";
}Dieser Test markiert eine Nachricht mit der Kategorie Known, wenn der Absender in der Liste :addrbook:personal?label=Family enthalten ist. Die Liste kann in zwei Teile unterteilt werden. Erstens bedeutet :addrbook:personal, dass sich die Adresse in deinem persönlichen Adressbuch befindet. Zweitens schränkt label=Family die Liste weiter ein, indem es festlegt, dass der Kontakt nicht nur in deinem Adressbuch stehen, sondern auch der Kontaktgruppe Family angehören muss. Bei Bedarf kannst du diese Kategorie in eine andere Kontaktgruppe ändern. Du könntest bei Bedarf :addrbook:personal?label=Work verwenden. In diesem Fall wäre der Test nur dann erfolgreich, wenn sich der Absender in deinem Adressbuch und in der Kontaktgruppe Work befindet.
Allgemeiner ausgedrückt entspricht eine Liste dem Tag-URI-Schema(neues Fenster), und du kannst zusätzliche Parameter hinzufügen, um deine Filter einzugrenzen. Du kannst diese Liste dann wie folgt verwenden:
require ["fileinto", "extlists"];
# replace :your:list:here by the list you want to use
if header :list "from" ":your:list:here"
{
# some actions...
}Wir haben vier verschiedene Listen bereitgestellt:
- :addrbook:personal¹ prüft, ob sich eine Adresse in deiner Kontaktliste befindet. Die Liste akzeptiert den Parameter label, der mit einer bestimmten Kontaktgruppe übereinstimmt. Dieser Parameter kann in vier Unterversionen vorliegen:
- :addrbook:personal?label=something stimmt mit einem Kontakt überein, der sich in der Kontaktgruppe „something“ befindet;
- :addrbook:personal?label.starts-with=something stimmt mit einem Kontakt überein, der zu mindestens einer Gruppe gehört, die mit „something“ beginnt;
- :addrbook:personal?label.ends-with=something stimmt mit einem Kontakt überein, der zu mindestens einer Gruppe gehört, die mit „something“ endet;
- :addrbook:personal?label.contains=something stimmt mit einem Kontakt überein, der zu mindestens einer Gruppe gehört, die „something“ enthält.
Du kannst auch auf kryptografische Informationen bezüglich der übereinstimmenden E-Mail zugreifen:
- :addrbook:personal?keypinning=true stimmt mit einem Kontakt überein, der über einen vertrauenswürdigen Schlüssel verfügt. Das Ändern von „true“ zu „false“ stimmt mit einem Kontakt überein, der keinen vertrauenswürdigen Schlüssel hat;
- :addrbook:personal?encryption=true stimmt mit einem Kontakt überein, für den die Verschlüsselung aktiviert ist. Das Ändern von „true“ zu „false“ stimmt mit einem Kontakt überein, für den die Verschlüsselung nicht eingerichtet oder deaktiviert ist;
- :addrbook:personal?signing=true findet einen Kontakt, für den das Signieren aktiviert ist. Wenn du „true“ in „false“ änderst, wird ein Kontakt gefunden, für den das Signieren deaktiviert ist.
- :addrbook:myself¹ findet jede Adresse, die dir selbst gehört;
- :addrbook:organization findet jede Adresse, die jemandem aus der Organisation gehört, in der du Mitglied bist;
- :incomingdefaults:inbox prüft, ob sich die Adresse in deiner Freigabeliste befindet;
- :incomingdefaults:spam prüft, ob sich die Adresse in deiner Sperrliste befindet.
In Kombination mit der Variablen-Erweiterung (beschrieben im nächsten Absatz) werden die übereinstimmenden Variablen geändert. Die übereinstimmende Variable ${0} enthält immer die letzte E-Mail-Adresse, die in der angegebenen Liste enthalten ist. Wenn die Liste mit der Anmerkung 1 markiert wurde, enthält die übereinstimmende Variable ${1} den Anzeigenamen.
Mit den folgenden Listen kannst du beispielsweise einen Filter erstellen, der alle empfangenen E-Mails löscht, die nicht von deiner Family oder jemandem auf deiner Positivliste stammen:
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
}Wenn diese Bedingung erfüllt ist, wird die Aktion discard ausgeführt. Diese Aktion löscht die E-Mail sofort und dauerhaft . Du könntest sie auch einfach mit einer fileinto -Aktion anstelle von „discard“ in den Papierkorb-Ordner verschieben: fileinto “trash”;.
Erstellen von Variablen
Ein weiteres nützliches Tool beim Verwalten von Kontext ist die Definition einer Variable. Eine Variable ist ein temporärer Speicherort, in den du Text einfügen und mit einem Namen kennzeichnen kannst. Später kannst du diesen Inhalt wiederverwenden, indem du ihn über seinen Namen aufrufst. Du könntest beispielsweise folgendes Skript haben:
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}";Das Ziel dieses Skripts ist es, eine E-Mail mit einer benutzerdefinierten Nachricht abzulehnen. Wenn die ursprüngliche E-Mail von kenny stammt und ihr Betreff ‚mmph mmph‘ lautet, wird die Variable ‚message‘ mit dem Inhalt mmph mmph erstellt. Andernfalls wird die Nachricht mit ‚Tut mir leid, ich möchte heute keine E-Mails!‘ befüllt. Im letzten Schritt verwenden wir diese Variable dann im Befehl „reject“ wieder.
Sieve definiert Variablen nicht von Haus aus, daher werden sie in der Erweiterung variables definiert, die am Anfang deines Skripts angefordert werden muss. Es gibt zwei Möglichkeiten, eine Variable zu definieren.
- Explizite Erstellung einer Variable:
Die Aktion set wird bereitgestellt, um eine Variable zu erstellen.
require "variables"; # Create a variable called "labelname" and containing the string "Work". set "labelname" "Work";
Die erste Zeichenkette ist der Name deiner Variable und die zweite ist der Wert deiner Variable. Das vorherige Beispiel erstellt also eine Variable namens labelname , die Work enthält.
Sobald eine Variable definiert ist, kannst du sie aufrufen, indem du das folgende Format in einer Zeichenkette hinzufügst: ${name}, wobei name der Name deiner Variable ist. Bei der Ausführung wird sie durch den Wert der Variable ersetzt. (Wenn du die Variable nicht definiert hast, wird sie durch eine leere Zeichenkette ersetzt.) In dem folgenden Skript gilt also:
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}";Deine E-Mail wird mit der Kategorie /Work gekennzeichnet. Da wir die Variable labelname bereits definiert haben, wird sie durch Work ersetzt. Da foldername jedoch nicht definiert ist, wird sie einfach entfernt.
- Implizite Zuweisung einer Variable:
Der interessanteste Anwendungsfall für Variablen ist die Verwendung eines :matches-Tests. Nehmen wir das folgende Beispiel, bei dem der Absender der E-Mail test@proton.me ist:
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}";
}Bei Verwendung der Variablen-Erweiterung wird das Ergebnis einer match-Operation in den Variablen gespeichert. Es werden mehrere Variablen mit einem numerischen Namen festgelegt. Zuerst enthält die Variable 0 den vollständigen Treffer (in unserem Beispiel ist das die vollständige Adresse: test@proton.me). Dann wird die erste Übereinstimmungsgruppe der Variable 1 zugewiesen (in unserem Beispiel ist das test), die zweite Übereinstimmungsgruppe wird der zweiten Variable zugewiesen (proton.me) und so weiter bis zur letzten Übereinstimmungsgruppe.
In unserem Beispiel wird der Befehl fileinto ausgeführt. Der Speicherort ist als ${1} definiert, was als Variable erkannt und somit durch ihren oben berechneten Wert ersetzt wird: test.
Beachte, dass es auch möglich ist, Variablen in einem :regex-Test mithilfe von Übereinstimmungsgruppen für reguläre Ausdrücke zuzuweisen.
Variablen transformieren
Eine schöne Möglichkeit ist die Transformation von Variablen. Hierfür kann das Schlüsselwort „set“ mit einer Kombination von Flags verwendet werden, mit denen der Wert vor der Zuweisung an die Variable geändert werden kann.
- :lower wandelt den Wert einer Variable in Kleinbuchstaben um;
- :upper wandelt den Wert einer Variable in Großbuchstaben um;
- :lowerfirst wandelt den ersten Buchstaben des Variablenwerts in einen Kleinbuchstaben um;
- :upperfirst wandelt den ersten Buchstaben des Variablenwerts in einen Großbuchstaben um;
- :quotewildcard setzt jeden in der Zeichenkette enthaltenen Platzhalter in Anführungszeichen, sodass er in einer Match-Anweisung wörtlich verwendet werden kann;
- :length gibt die Länge des Werts zurück.
Beachte, dass du eine definierte Variable auch in einer anderen „set“-Aktion wiederverwenden kannst. Lass uns unsere vorherigen Beispiele verbessern:
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}";Schritt für Schritt erstellt der Filter drei Variablen. Der erste Befehl set erstellt die Variable labelname. Der Inhalt der Variable ist Work. Tatsächlich wird der ursprüngliche Wert WORK sowohl mit dem Flag :lower als auch mit dem Flag :upperfirst transformiert, wodurch sich die Schreibweise in work und dann in Work ändert.
Der zweite „set“-Befehl erstellt eine zweite Variable namens foldername, die die Zeichenkette „Geneva“ enthält. Tatsächlich wurden die Flags :lower und :upperfirst verwendet.
Schließlich wird die Variable location erstellt. Der Wert „${foldername}/${labelname}“ enthält zwei Variablen: foldername und labelname. Der Sieve-Interpreter ersetzt diese Variablen also durch ihre Werte: Work und Geneva.
Schließlich wird die Variable location als Argument für den Befehl „fileinto“ verwendet. Somit wird die E-Mail in den Ordner verschoben, dessen Name der Wert der Variable location ist: Work/Geneva.
Die Komparatoren können auch auf übereinstimmende Variablen angewendet werden:
require "variables";
require "fileinto";
if address :all :matches "from" "*@*" {
set :lower :upperfirst "fileintovar" "${1}";
fileinto "${fileintovar}";
}Wenn der Absender der E-Mail hier test@proton.me ist, wird sie mit der Kategorie Test gekennzeichnet.
Eine andere Möglichkeit, den Wert einer Variable zu ändern, ist die Verwendung der Erweiterung vnd.proton.eval. Diese Erweiterung definiert das neue Flag :eval, mit dem du einfache Berechnungen durchführen kannst:
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 diesem Beispiel, und immer noch unter der Annahme, dass die E-Mail von test@proton.me eingeht, wird die E-Mail mit dem Wert 478 gekennzeichnet. Tatsächlich beträgt die Länge der ersten übereinstimmenden Variable 19, und das Ergebnis von 19 * 25 – 1 / 8 + 3 wird auf 478 aufgerundet.
Das mag auf den ersten Blick nutzlos erscheinen, aber diese Erweiterung ergibt in Kombination mit anderen Operationen mehr Sinn.
Vergleich mit anderen Feldern in Sieve
Der Abgleich auf bestimmte Kopfzeilen ist ebenfalls möglich. Um beispielsweise alle an Listen gesendeten Nachrichten abzulegen (oft handelt es sich dabei um Marketing-Nachrichten oder Newsletter), kannst du Folgendes tun:
require "fileinto";
# Filter all lists into the same folder
if exists "list-unsubscribe"
{
fileinto "advertisements";
}Um Social-Media-E-Mails in ihren eigenen Ordner zu sortieren, könntest du schreiben:
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";
}Beachte, dass wir Folgendes verwenden:
anyof(exists "x-facebook", exists "x-linkedin-id")
anstelle von:
exists ["x-facebook", "x-linkedin-id"]
Da Letzteres prüft, ob sowohl x-facebook und x-linkedin-id festgelegt wurden.
Um tatsächlich zu sehen, welchen Wert eine Kopfzeile enthält, kannst du den header-Test verwenden:
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";
}Abgesehen von der Operation „:is“, die eine exakte Übereinstimmung sucht, unterstützt der Befehl „header“ auch „:matches“, das Platzhalter verwendet (z. B. sucht „*@*.com“ nach jeder E-Mail-Adresse, die auf .com endet), und den Befehl „:contains“, der prüft, ob die Kopfzeile eine bestimmte Zeichenkette enthält.
Um Sieve-Filter zu entwerfen, kann es nützlich sein, die Kopfzeilen einer E-Mail abzurufen. Gehe dazu in der Proton Mail-Weboberfläche auf Mehr (∨) → Kopfzeilen anzeigen. Es öffnet sich ein neues Fenster, das alle Kopfzeilen der E-Mail enthält.
Filterung nach Nachrichtengröße in Sieve
Es ist möglich, große E-Mails anders zu behandeln als kleine E-Mails. Beispielsweise möchtest du große E-Mails vielleicht markieren, damit du sie löschen kannst, um Postfachspeicherplatz zu sparen. Dies lässt sich auf folgende Weise erreichen:
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";
}Wie du sehen kannst, sind Einheiten verfügbar, wenn du große Größen angeben möchtest, indem du den der gewünschten Einheit entsprechenden Buchstaben direkt nach der Zahl einfügst. Drei Einheiten sind verfügbar: K für ein Kibioktett (oder 1024 Bytes), M für ein Mebioktett (oder 1.048.576 Bytes) und G für ein Gibioktett (oder 1.073.741.824 Bytes).
Bitte beachte, dass „over“ in diesem Fall „größer als“ bedeutet und „under“ „kleiner als“. Das bedeutet, dass wenn eine Nachricht eine Größe von genau 1000 Bytes hat, weder
size :under 1000
noch
size :over 1000
übereinstimmen wird.
Beachte, dass Sieve-Filter keinen Zugriff auf den tatsächlichen Inhalt haben und nur die verschlüsselte Größe anzeigen.
Ausführen von erweiterten Aktionen für Nachrichten
Du kannst in Sieve verschiedene Reaktionen auf eine Nachricht ausführen. Wir haben die Aktionen fileinto, addflag, discard und reject bereits in den vorherigen Abschnitten vorgestellt. Hier stellen wir weitere erweiterte Aktionen vor.
Abwesenheitsnotizen und Datumsprüfungen
Du kannst die Funktion für automatische Antworten in Sieve mit dem Befehl vacation nachbilden. Tatsächlich greift die Funktion für automatische Antworten in deinen Einstellungen auf Sieve zurück, um ihre Aufgabe zu erfüllen. Aber wenn du die Abwesenheitsoptionen in einem Skript verwendest, hast du viel mehr Möglichkeiten, deine automatischen Antworten anzupassen. Beispielsweise kannst du bestimmte Nachrichten je nach Bedingungen anpassen. Hinweis: Wie auch die Funktion für automatische Antworten in den Einstellungen ist die Aktion vacation nur in kostenpflichtigen Abonnements verfügbar.
Der Befehl vacation sendet eine Abwesenheitsantwort an jeden, der versucht, dich zu kontaktieren. Er wird oft mit den Prüfungen currentdate oder date kombiniert, um Antworten in einem bestimmten Zeitraum zu senden.
Angenommen, ich gehe vom 14. Juli 2017 bis zum 14. August 2017 (Colorado-Zeit) in den Urlaub. Ich kann den folgenden Sieve-Code verwenden, um eine automatische Antwort einzurichten:
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.";
}Zu den optionalen Argumenten für einen vacation-Befehl gehören die Argumente :handle und :days. Standardmäßig antwortet Sieve demselben Absender innerhalb einer bestimmten Anzahl von Tagen (dem sogenannten Timeout) nicht mehrmals. Dies verhindert, dass du versehentlich zahlreiche automatische E-Mails versendest.
Um das Timeout zu steuern, kannst du den Parameter :days verwenden. Das Argument :days wird verwendet, um den Zeitraum anzugeben, in dem Adressen gespeichert und nicht beantwortet werden, und wird immer in Tagen angegeben. Manchmal hast du mehrere vacation-Befehle in deinem Sieve-Skript und musst sicherstellen, dass jeder davon mindestens einmal eine Antwort sendet (wenn die Regel zutrifft). In diesem Fall kann die Option :handle verwendet werden. Das Argument für :handle ist eine Zeichenfolge, die die Art der gesendeten Antwort identifiziert.
Um zu sehen, wie das funktioniert, stelle dir vor, du bist Lehrer. Lehrer erhalten Hausaufgaben oft per E-Mail. Es ist nützlich, sie in einen eigenen Ordner zu sortieren. Darüber hinaus kannst du alle Abgaben ablehnen, die nach dem Abgabetermin eingehen.
In einem solchen Fall möchtest du vielleicht handle verwenden, um sicherzustellen, dass Antworten gesendet werden, wenn sie benötigt werden:
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 sind alle für die Abwesenheitsantwort zulässigen Argumente in der Reihenfolge aufgeführt, in der sie übergeben werden sollten:
- :days ist die Anzahl der Tage, für die die automatische Antwort nach dem Senden einer Abwesenheitsnachricht keine weitere Antwort an denselben Absender senden soll
- :subject ist ein Präfix (standardmäßig „auto“), das die automatische Antwort für die Antwort an den Absender verwenden soll. Beispielsweise wird auf „Homework Assignment 2“ mit „late: Homework Assignment 2“ geantwortet, wenn :subject “late” übergeben wird.
- :mime gibt an, dass die erste Zeile der Antwort ein bestimmtes Format verwendet. Dadurch kann der Absender mit HTML-Nachrichten antworten. Um beispielsweise eine HTML-Antwort zu schreiben, übergib das Argument :mime und schreibe in die erste Zeile der Antwort Content-Type : text/html.
- :handle ist eine Zeichenfolge, die die Art der gesendeten Antwort identifiziert.
Bitte beachte, dass der Parameter :zone in currentdate optional ist und die Ortszeit des Servers (Genf, Schweiz, im Fall von Proton Mail) verwendet wird, wenn er nicht festgelegt ist.
Der Zone-Parameter akzeptiert Zeitzonen-Offsets, d. h. Zeichenfolgen der Form „+0100“ für UTC+1, sowie tatsächliche Zeitzonen aus der ICANN-Datenbank (siehe https://en.wikipedia.org/wiki/List_of_tz_database_time_zones(neues Fenster)). Die letzte Option ist oft nützlicher (obwohl sie nicht dem Sieve-Standard entspricht), da sie auch die Sommerzeit der jeweiligen Zeitzone kodiert.
Du kannst Daten vergleichen, indem du die normalen Parameter :is/ :contains/ :matches verwendest. So stimmt beispielsweise der folgende Sieve-Befehl mit jedem Datum im Juli 2017 überein:
currentdate :zone "US/Mountain" :matches "date" "2017-07-??"
In den meisten Fällen ist der Parameter :value jedoch weitaus nützlicher.
Der letzte Parameter, den du übergeben musst, ist das Format. Das Format kodiert auch, welchen Teil des Datums du vergleichen möchtest. Im vorliegenden Beispiel haben wir das Datumsformat verwendet. Alle unterstützten Formate sind:
- year, das Jahr, kodiert im Format „0000“ bis „9999“
- month, der Monat, kodiert als „01“ bis „12“
- day, der Tag, kodiert als „01“ bis „31“
- date, kodiert als yyyy-mm-dd
- hour, die Stunde, kodiert als „00“ bis „23“
- minute, die Minute, kodiert als „00“ bis „59“
- second, die Sekunde, kodiert als „00“ bis „60“ (60 ist eine Schaltsekunde(neues Fenster), die nur um 23:59:60 Uhr vorkommt, wenn Wissenschaftler es für nötig halten)
- time, die Uhrzeit als hh:mm:ss
- iso8601, Datum und Uhrzeit nach dem ISO8601-Standard, zum Beispiel: 2005-08-15T15:52:01+00:00
- std11, Datum und Uhrzeit nach dem RFC2822-Standard, zum Beispiel: Mon, 15 Aug 2005 15:52:01 +0000
- zone, die Zeitzonenverschiebung im Format +/-zzzz, zum Beispiel +0000 oder -1200
- julian, die Anzahl der Tage seit dem 17. November 1858 UTC
- weekday, der Wochentag, beginnend mit Sonntag als 0 bis Samstag als 6
Schließlich ist es auch möglich, das Datum aus einer Kopfzeile abzurufen, anstatt currentdate zu verwenden. Dieser date-Befehl funktioniert auf dieselbe Weise wie currentdate, erfordert jedoch eine zusätzliche Zeichenfolge vor der Formatzeichenfolge: den Namen der Kopfzeile. Zum Beispiel:
date :zone "US/Mountain" :matches "received" "date" "2017-07-??"
Bitte beachte, dass Kopfzeilen nicht unbedingt korrekt sein müssen: Ein Absender kann sie nach Belieben ändern, weshalb sie nicht zuverlässig sind.
Überlegungen:
- Der Autoresponder reagiert nicht auf automatisch generierte Nachrichten wie Verteilerlisten, E-Mails, die von einer anderen automatischen Antwort gesendet wurden, oder Nachrichten, die von einer noreply-Adresse gesendet wurden.
- Der Autoresponder sendet Nachrichten nicht mehrmals an dieselbe E-Mail-Adresse, es sei denn, der vacation-Befehl verfügt über ein anderes :handle.
Ablauf verwalten
Eine einzigartige Funktion von Proton Mail ist die Möglichkeit, eine Ablaufzeit für gesendete Nachrichten festzulegen. Nach Ablauf dieser Zeit wird die Nachricht aus dem Postfach des Empfängers gelöscht.
Du kannst diese Funktion auch verwenden, um deine eingehenden Nachrichten zu verwalten, indem du eine Ablaufzeit hinzufügst:
require "vnd.proton.expire"; # permanently delete all incoming and outgoing emails after 10 days expire "day" "10";
Das obige Skript löscht jede empfangene E-Mail nach 10 Tagen. Dieses Skript ist etwas extrem, da es für alle E-Mails gilt. Stattdessen solltest du wahrscheinlich eine Bedingung verwenden, um das Skript nur auf eine bestimmte Gruppe von E-Mails anzuwenden. Du könntest beispielsweise festlegen, dass jede Nachricht von jemandem abläuft, der sich nicht in deinen Kontakten befindet:
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";
}Hinweis: Wenn die angegebene Ablaufzeit 730 Tage überschreitet, wird sie automatisch auf 730 Tage begrenzt.
Einschränkungen von Sieve
Es gibt einige Sieve-Einschränkungen, die du beachten solltest.
- Gesendete Nachrichten können nicht manuell oder per Filter in den Posteingang/Entwurf verschoben werden. Sie verbleiben immer im Ordner „Gesendet“ und in den vom Benutzer oder Filter angewendeten Ordnern/Kategorien.
- Empfangene Nachrichten können nicht manuell oder per Filter in Entwurf/Gesendet verschoben werden.
- Entwürfe können nicht manuell oder per Filter in den Posteingang/Gesendet verschoben werden.
- Für Nachrichten im Spam-Ordner – oder Nachrichten, die bei der Verarbeitung in den Spam-Ordner verschoben werden – senden wir keine automatischen Antworten/Abwesenheitsnachrichten. Wenn du eine solche Funktion benötigst, kannst du einen benutzerdefinierten Ordner hinzufügen (zum Beispiel „mySpam“) und die Benachrichtigungen dafür deaktivieren.
- Einschränkungen für automatische Antworten/Abwesenheitsnachrichten
Hinweis zur Unterstützung regulärer Ausdrücke
Die Sieve-Implementierung von Proton folgt dem Sieve-E-Mail-Filterstandard, der nur eine minimale Unterstützung für reguläre Ausdrücke enthält. Einige gängige Kurzschreibweisen für reguläre Ausdrücke wie \b (Wortgrenze), \w (Wortzeichen), \W (Nicht-Wortzeichen) und \d (Ziffer) werden in Sieve nicht unterstützt. Daher kann die Verwendung dieser Kurzzeichen in Filtern dazu führen, dass diese unbemerkt fehlschlagen. Diese Einschränkung ist auf den Sieve-Standard selbst zurückzuführen, bei dem Einfachheit und Plattformkompatibilität im Vordergrund stehen. Ausführliche Details findest du im Sieve Regular Expressions Draft RFC.
Liste der unterstützten Aktionen und Tests
Pakete
Sieve unterstützt die folgenden Erweiterungen. Weitere Informationen findest du in der offiziellen Dokumentation.
Date
- Verwendung: date
- Beschreibung: (neues Fenster)Bietet eine Möglichkeit, Datumsinformationen zu prüfen.
- Dokumentation: https://tools.ietf.org/html/rfc5260(neues Fenster)
- Implementierung: Der Standard-Komparator ist i;ascii-numeric und nicht i;ascii-casemap. In der Tat ist „date“ mit dem Casemap-Komparator nicht nützlich.
- Siehe: Abwesenheitsnachrichten und Datumstests
Envelope
- Verwendung: envelope
- Beschreibung: (neues Fenster)Definiert Tests rund um den SMTP-Envelope der Nachricht.
- Dokumentation: https://tools.ietf.org/html/rfc5228#section-5.4(neues Fenster)
- Siehe: Vergleich mit Adressen in Sieve
FileInto
- Verwendung: fileinto
- Beschreibung: Wendet eine Kategorie auf eine Nachricht an oder verschiebt sie in einen Ordner.
- Dokumentation: https://tools.ietf.org/html/rfc5228#section-4.1(neues Fenster)
- Implementierung: Schrägstriche geben den vollständigen Pfad des Ordners an und müssen maskiert werden, wenn ein Kategoriename einen Schrägstrich enthält. Die folgenden Optionen werden unterstützt:
- „Work“: Dies ist die Kategorie oder der Ordner mit dem Namen „Work“
- „Work/Project1“: Dies ist der Unterordner „Project1“ im Ordner „Work“
- „Work/Project1/Docs“: Dies ist der Unterordner „Docs“ im Unterordner „Project1“, der sich im Ordner „Work“ befindet
- „Work/Misc\\/Others“: Dies ist der Unterordner „Misc/Others“ im Ordner „Work“
- Siehe: Erste Schritte
Imap4flags
- Verwendung: imap4flags
- Beschreibung: Wendet eine Markierung auf eine Nachricht an.
- Dokumentation: https://tools.ietf.org/html/rfc5232(neues Fenster)
- Implementierung: Variablenlisten-Parameter werden nicht unterstützt. Verwende stattdessen die variables-Erweiterung.
- Siehe: Erste Schritte
Reject
- Verwendung: reject
- Beschreibung: Lehnt eine Nachricht mit einer bestimmten Nachricht ab.
- Dokumentation: https://tools.ietf.org/html/rfc5429(neues Fenster)
- Siehe: Erste Schritte
Vacation
- Verwendung: vacation
- Beschreibung: Sendet eine automatische Antwortnachricht.
- Dokumentation: https://tools.ietf.org/html/rfc5230(neues Fenster)
- Siehe: Abwesenheitsnachrichten und Datumstests
Variables
- Verwendung: variables
- Beschreibung: Erstellt und verwendet Variablen.
- Dokumentation: https://tools.ietf.org/html/rfc5229(neues Fenster)
- Siehe: Variablen erstellen
Relational
- Verwendung: relational
- Beschreibung: Bietet relationale Vergleichsoperatoren.
- Dokumentation: https://tools.ietf.org/html/rfc5231
Regex
- Verwendung: regex
- Beschreibung: Bietet die Regex-Vergleichsoperatoren.
- Dokumentation: https://tools.ietf.org/id/draft-ietf-sieve-regex-01.html
Numerischer ASCII-Komparator
- Verwendung: comparator-i;ascii-numeric
- Beschreibung: Bietet einen Zahlenvergleich.
- Dokumentation: https://tools.ietf.org/html/rfc5231(neues Fenster)
Extern gespeicherte Listen
- Verwendung: extlists
- Beschreibung: Ermöglicht den Zugriff auf Kontaktlisten.
- Dokumentation: https://tools.ietf.org/html/rfc6134(neues Fenster)
- Implementierung: Die folgenden Listen werden unterstützt
- addrbook:personal : Persönliche Kontaktliste. Die folgenden Abfragen werden unterstützt:
- label[.starts-with / .ends-with / .contains]=<group: string>: Operation bezüglich einer Kontaktgruppe;
- keypinning=<value: true / false> Definition des öffentlichen Schlüssels des Kontakts;
- encryption=<value: true / false> Standard-Verschlüsselung des Kontakts;
- signing=<value: true / false> Standard-Signatur des Kontakts.
- :addrbook:myself Dem aktuellen Benutzer gehörende Adressen;
- :addrbook:organization Den Mitgliedern der aktuellen Organisation gehörende Adressen;
- :incomingdefaults:inbox Freigabeliste
- :incomingdefaults:spam Sperrliste
- addrbook:personal : Persönliche Kontaktliste. Die folgenden Abfragen werden unterstützt:
- Siehe: Zugriff auf deine Kontaktliste
Eval
- Verwendung: vnd.proton.eval
- Beschreibung: Wertet eine einfache arithmetische Funktion aus, die in einer Zeichenkette angegeben ist.
- Dokumentation: Variablen transformieren
Include
- Verwendung: include
- Beschreibung: Verwaltet den Sieve-Workflow.
- Dokumentation: https://tools.ietf.org/html/rfc6609(neues Fenster)
- Implementierung: Nur der return-Knoten wird unterstützt.
Ablauf
- Verwendung: vnd.proton.expire
- Beschreibung: Verwaltet den Ablauf von Nachrichten.
- Dokumentation: Ablauf verwalten
Tests
Currentdate
- Verwendung:
currentdate [":zone" <time-zone: string>] [COMPARATOR] [MATCH-TYPE] <date-part: string> <key-list: string-list>
- Beschreibung: Führt einen Test mit dem aktuellen Datum auf dem Proton Mail-Server durch
- Paket: date
- Siehe: Liste der unterstützten Aktionen und Tests
Date
- Verwendung:
date [":zone" <time-zone: string> / ":originalzone"] [MATCH-TYPE] <header-name: string> <date-part: string> <key-list: string-list
- Beschreibung: Führt einen Test mit dem in einer Kopfzeile beschriebenen Datum durch.
- Paket: date
- Siehe: Liste der unterstützten Aktionen und Tests
HasFlag
- Verwendung:
hasflag [MATCH-TYPE] [COMPARATOR] <list-of-flags: string-list>
- Beschreibung: Prüft, ob eine bestimmte Nachricht ein bestimmtes Flag hat.
- Paket: imap4flags
- Siehe: Erste Schritte
Envelope
- Verwendung:
envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <envelope-part: string-list> <key-list: string-list>
- Beschreibung: Prüft, ob der angegebene Teil des SMTP-Umschlags mit dem angegebenen Schlüssel übereinstimmt.
- Paket: envelope
- Siehe: Vergleich mit Adressen in Sieve – Erweitert
Adresse·
- Verwendung:
address [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE] <header-list: string-list> <key-list: string-list>
- Beschreibung: Prüft, ob die angegebene(n), als Adresse analysierte(n) Kopfzeile(n) mit dem/den angegebenen Schlüssel(n) übereinstimmen.
- Paket: <Standard>
- Siehe: Vergleich mit Adressen in Sieve
Kopfzeile
- Verwendung:
header [COMPARATOR] [MATCH-TYPE] <header-names: string-list> <key-list: string-list>
- Beschreibung: Prüft, ob die angegebene(n) Kopfzeile(n) mit dem/den angegebenen Schlüssel(n) übereinstimmen.
- Paket: <Standard>
- Siehe: Vergleich mit weiteren Feldern in Sieve
HasExpiration
- Verwendung:
hasexpiration
- Beschreibung: Prüft, ob für eine Nachricht eine Ablaufzeit festgelegt ist.
- Paket: vnd.proton.expire
Exists
- Verwendung:
exists <header-names: string-list>
- Beschreibung: Prüft, ob (alle) der angegebenen Kopfzeilen existieren.
- Paket: <Standard>
- Siehe: Vergleich mit weiteren Feldern in Sieve
Ablauf
- Verwendung:
expiration :comparator "i;ascii-numeric" [MATCH-TYPE] <unit: "day" / "minute" / "second"> <key-list: string-list>
- Beschreibung: Vergleicht die Ablaufzeit der Nachricht mit dem/den angegebenen Schlüssel(n). Der Test schlägt fehl, wenn er für eine nicht ablaufende Nachricht ausgeführt wird.
- Paket: vnd.proton.expire
Size
- Verwendung:
size <":over" / ":under"> <limit: number>
- Beschreibung: Prüft, ob die Gesamtgröße der Nachricht (einschließlich Anhängen) über oder unter einem bestimmten Grenzwert liegt.
- Paket: <Standard>
- Siehe: Filtern nach Nachrichtengröße in Sieve
String
- Verwendung:
string [MATCH-TYPE] [COMPARATOR] <source: string-list> <key-list: string-list>
- Beschreibung: Prüft, ob eine der Quellzeichenfolgen mit einem der Schlüssel übereinstimmt.
- Paket: variables
Anyof
- Verwendung:
anyof <tests: test-list>
- Beschreibung: Führt ein logisches ODER für die bereitgestellten Tests aus.
- Paket: <Standard>
- Siehe: Erste Schritte
Allof
- Verwendung:
allof <tests: test-list>
- Beschreibung: Führt ein logisches UND für die bereitgestellten Tests aus.
- Paket: <Standard>
- Siehe: Erste Schritte
Not
- Verwendung:
not <test: test>
- Beschreibung: Kehrt das Ergebnis des angegebenen Tests um.
- Paket: <Standard>
- Siehe: Erste Schritte
True
- Verwendung:
true
- Beschreibung: Trifft immer zu.
- Paket: <Standard>
False
- Verwendung:
false
- Beschreibung: Trifft nie zu.
- Paket: <Standard>
Aktionen
Require
- Verwendung:
require <packages: string-list>
- Beschreibung: Lädt eine angegebene Erweiterung, sodass deren Methoden oder Modifikationen verwendet werden können.
- Paket: <Standard>
- Siehe: Erste Schritte
FileInto
- Verwendung:
fileinto <folder: string>
- Beschreibung: Verschiebt die Nachricht, die verarbeitet wird, in einen bestimmten Ordner.
- Paket: fileinto
- Siehe: Erste Schritte
Addflag
- Verwendung:
addflag <list-of-flags: string-list>
- Beschreibung: Fügt der Nachricht, die verarbeitet wird, das angegebene Flag hinzu.
- Paket: imap4flags
- Siehe: Erste Schritte
Removeflag
- Verwendung:
removeflag <list-of-flags: string-list>
- Beschreibung: Entfernt die angegebenen Flags aus der Nachricht, die verarbeitet wird.
- Paket: imap4flags
Setflag
- Verwendung:
setflag <list-of-flags: string-list>
- Beschreibung: Entfernt alle Flags und legt die angegebenen Flags für die Nachricht fest, die verarbeitet wird.
- Paket: imap4flags
Stop
- Verwendung:
stop
- Beschreibung: Stoppt die Verarbeitung aller Sieve-Filter. Nachfolgende Sieve-Filter werden nicht ausgeführt.
- Paket: <Standard>
Return
- Verwendung:
return
- Beschreibung: Stoppt die Verarbeitung des aktuellen Sieve-Filters. Nachfolgende Sieve-Filter werden weiterhin ausgeführt.
- Paket: include
Festlegen
- Verwendung:
set [MODIFIER] <name: string> <value: string>
- Beschreibung: Erstellt neue Variablen, die den angegebenen Namen und den angegebenen Wert miteinander verknüpfen.
- Paket: variables
- Siehe: Variablen erstellen
Verwerfen
- Verwendung:
discard
- Beschreibung: Verwirft die Nachricht am Ende dieses Sieve-Filters. Nach dem Verwerfen werden keine anderen Sieve-Filter mehr ausgeführt.
- Paket: <Standard>
Behalten
- Verwendung:
keep
- Beschreibung: Macht den letzten „verwerfen“-Befehl rückgängig. Hat nur Auswirkungen, wenn er sich im selben Sieve-Filter befindet. Wenn kein „verwerfen“ ausgeführt wurde, hat dies keine Auswirkungen.
- Paket: <Standard>
Reject
- Verwendung:
reject <reason: string>
- Beschreibung: Sendet eine E-Mail mit dem Grund an die SMTP-Adresse des Absenders und verwirft diese Nachricht sofort. Der „keep“-Befehl bricht diese Aktion nicht ab.
- Paket: <Standard>
- Siehe: Erste Schritte, Abwesenheitsbenachrichtigungen und Datumsprüfungen
Ablaufen
- Verwendung:
expire <unit: "day" / "minute" / "second"> <value: string>
- Beschreibung: Lässt eine Nachricht nach der angegebenen Zeit ablaufen.
- Paket: vnd.proton.expire
- Siehe: Ablauf verwalten
Ablauf aufheben
- Verwendung:
unexpire
- Beschreibung: Entfernt die Ablaufzeit einer Nachricht.
- Paket: vnd.proton.expire
Vacation
- Verwendung:
vacation [":days" number] [":subject" string] [":mime"] [":handle" string] <reason: string>
- Beschreibung: Sendet eine automatische Antwort an die SMTP-Adresse des Absenders mit dem angegebenen Grund im Textkörper.
- Paket: vacation (erfordert ein kostenpflichtiges Konto)
- Siehe: Abwesenheitsbenachrichtigungen und Datumsprüfungen
Gültige externe Liste
- Verwendung:
valid_ext_list <ext-list-names: string-list>
- Beschreibung: Prüft, ob alle angegebenen externen Listen unterstützt werden und gültig sind.
- Paket: extlists



