eMails filtern mit Sieve


Sieve ist eine speziell für die Konfiguration von Mailfiltern auf Mailservern entwickelte domänenspezifische Sprache. Eine ausführliche Spezifikation dieser Sprache findet sich im RFC 5228. Der Hauptzweck von Sieve besteht darin, Benutzern die Möglichkeit zu geben, auf einfache Weise ihre eigenen Regeln für die Filterung von eMails zu definieren. Es ist jedoch zu beachten, dass die Verwendung komplexerer Programmstrukturen, die beispielsweise Schleifen oder Variablen beinhalten oder das Starten externer Programme ermöglichen, in Sieve nicht möglich ist.

Sieve legt den Fokus insbesondere auf Erweiterbarkeit, Einfachheit und Unabhängigkeit von der zugrunde liegenden Zugriffsart, der Architektur des Systems und dem verwendeten Betriebssystem. Diese Merkmale machen Sieve zu einer vielseitigen Lösung, die sich an unterschiedliche Anforderungen und Umgebungen anpassen kann.

Es ist erwähnenswert, dass Sieve-Skripte bereits während des Zustellprozesses der eMail am Posteingangsserver ausgeführt werden. Diese frühe Ausführung ermöglicht eine effektive und schnelle Anwendung der definierten Filterregeln, noch bevor die eMail im Postfach des Empfängers landet.

Sieve kann aber nicht nur direkt auf einem Mailserver eingesetzt werden, sondern wird auch von diversen eMail Clients genutzt, teilweise auch über Plugins, die zum Beispiel in Thunderbird integriert werden können. Aber auch eMail Provider, wie zum Beispiel Protonmail bieten den Endkunden eine Funktion, um eigene Sieve Skripts nutzen zu können.

Die Syntax ist gerade für Anfänger etwas kryptisch. Daher versuche ich einen kleinen Einstieg in diese äußerst praktische und nicht mehr weg zu denkende Skriptsprache zu geben.



Format eines Slieve Filters

Der Aufbau eines Slieve Skripts ist eigentlich recht einfach aufgebaut und besteht aus 3 Elementen:

  • Module die genutzt werden
  • Auf was soll der Filter angewendet werden?
  • Was soll mit dem Ergebnis passieren?

Hier ein einfaches Beispiel, welches eingehende Emails vom Absender info@email.de einen Label, bzw. eine Kategorie zugewiesen werden soll:

# Folgende Module werden benötigt
require ["fileinto", "imap4flags"];

# Der Filter soll immer dann greifen, wenn eine eMail mit dem Absender info@email.de empfangen wird
if address :is "from" "info@email.de"

# Wenn der obige Filter eine entsprechende Mail empfängt, dann folgendes damit machen: Kategorie mit dem Namen "Wichtig" zuweisen
{
    fileinto "Wichtig";
}

Die beiden Module dienen dazu, dass Mail verschoben, bzw. Kategorisiert werden können. Und entsprechend auf die IMAP Kennzeichen angepasst werden.

Der Filter selber ist noch recht einfach und erklärt sich fast von selber: Wenn eine eMailadresse (address) im Absenderfeld (:is "from") die folgende eMail ("info@email.de") stehen hat, dann markiere (fileinto) diese mit dem Bezeichner ("Wichtig"). Die Anführungszeichen werden nicht ausgewertet, sondern nur der Inhalt zwischen den Anführungszeichen.

Wenn also der Mailserver eine eMail von info@email.de empfängt, wir diese sofort mit der entsprechenden Kategorie gekennzeichnet, noch bevor der eMail Client diese abgerufen hat. Und bei jedem Empfang einer eMail, werden diese Filter durchlaufen. Es ist problemlos möglich, mehrere Filter gleichzeitig zu nutzen. So können auf diese Wiese Mails direkt sortiert, gekennzeichnet oder verschoben werden. Auch automatische Antwortfilter, zum Beispiel im Urlaub sind möglich. Und natürlich als Spam-Filter sind diese geradezu ideal. Denn es kann auf so ziemlich alles getestet und dann entsprechend reagiert werden. So kann man bekannte Domains von Spammern komplett sperren, so dass diese direkt beim eingehen auf dem Mailserver verworfen, also gelöscht werden.


Sieve Module

Es gibt verschiedene Module, die verwendet werden können. Um nur mal die wichtigsten zu nennen:

bodyDen Mailinhalt, also die eigentliche Nachricht untersuchen
copyNachrichten, die weitergeleitet werden, speichern
dateZeitstempel auswerten
discardMail löschen
editheaderDen Nachrichtenkopf modifizieren
encoded-characterNumerische kodierung von Sonderzeichen
enotifyBenachrichtigungen versenden
envelopeEinträge im Nachrichtenkopf auswerten
environmentInformationen über den Sieve Interpreter auslesen
fileintoVerschieben von Nachrichten
ihaveVerfügbare Sieve Module abfragen
imap4flagIMAP Kennzeichen setzen
includeAndere Slieve Skripte hinzuladen, praktisch bei großen Skripten
keepMail in INBOX speichern
mailboxUm IMAP Ordner anzulegen, bzw. festzustellen, ob dieser schon existiert
redirectMail an eine andere Adresse weiterleiten
regexRegular Expression Support
rejectMail abweisen
relationalErweiterung um relationale Abfragen
spamtestWenn ein zusätzliches Plugin für SPAM und Virenschutz verwendet wird
spamtestplusWenn ein zusätzliches Plugin für SPAM und Virenschutz verwendet wird
stopBeendet die Ausführung
subaddressDen Empfänger auf Unteradressen prüfen
vacationAbwesenheitsmeldung an Absender senden
variablesVariablen nutzen
virustestWenn ein zusätzliches Plugin für SPAM und Virenschutz verwendet wird

Für jeden Anwendungsfall sollte entsprechend das oder die jeweilige(n) Modul(e) angegeben werden. Dies geschieht durch den Befehl require"<MODULNAME>". Wenn mehrere Module benötigt werden, werden die einzelnen Module durch Komma getrennt in eckige Klammern gesetzt: require ["<MODULNAME1>", "<MODULNAME2>"]

Zum Beispiel:

require "fileinto";

oder bei mehreren Modulen:

require ["fileinto", "imap4flags", "vacation"];

Die require-Anweisung wird hauptsächlich dann verwendet, wenn spezifische Sieve-Erweiterungen oder Funktionen genutzt werden sollen, die nicht im Standardumfang enthalten sind. Wenn also Funktionen verwendet werden, die durch require aktiviert werden müssen, ist es wichtig, dies im Sieve-Skript anzugeben. Andernfalls könnten Fehler oder unerwartete Ergebnisse eintreten, wenn die erforderlichen Funktionen nicht verfügbar sind.

Zusammenfassend ist die Verwendung von require optional, es sei denn, es werden spezifische Funktionen oder Erweiterungen benötigt, die durch diese Anweisung aktiviert werden müssen.


Filterregel

Der if-Befehl in Sieve wird verwendet, um Bedingungen zu definieren, unter denen bestimmte Aktionen auf eMails angewendet werden sollen. Die grundlegende Syntax des if-Befehls lautet:

if <Bedingung> { // Aktionen, die ausgeführt werden sollen, wenn die Bedingung wahr ist }

Hier sind einige wichtige Aspekte und Möglichkeiten in Bezug auf den if-Befehl in Sieve:

1. Bedingungen

Sieve unterstützt verschiedene Arten von Bedingungen, die auf verschiedenen Teilen der eMail basieren können. Einige häufige Bedingungstypen sind:

  • address: Überprüft Absender- oder Empfängeradressen.
  • header: Überprüft den Inhalt von eMail-Headern.
  • body: Überprüft den Inhalt des eMail-Körpers.
  • exists: Überprüft, ob ein bestimmtes Header-Feld existiert.
  • true und false: Statische Bedingungen, die immer wahr bzw. immer falsch sind.

Beispiel:

if address :is "from" "info@email.de"
{
    fileinto "Inbox";
}

2. Logische Operatoren

Sieve unterstützt logische Operatoren wie allof (UND), anyof (ODER) und not (NICHT), die verwendet werden können, um mehrere Bedingungen zu kombinieren oder zu verneinen.

Beispiel:

if anyof (header :contains "Subject" "Important", address :is "from" "info@email.de") 
{
    fileinto "Important";
}

3. Header-Überprüfung

Mit header können Sie den Inhalt von eMail-Headern überprüfen. Sie können beispielsweise prüfen, ob der Betreff (Subject) einer eMail einen bestimmten Text enthält.

Beispiel:

if header :contains "Subject" "Besprechung" 
{ 
    fileinto "Besprechung"; 
}

4. Adressen-Überprüfung

Mit address können Sie Absender- oder Empfängeradressen überprüfen.

Beispiel:

if address :is "from" "info@email.de" 
{ 
    fileinto "Wichtig"; 
}

5. Nachrichten-Inhalt überprüfen

Die body-Bedingung ermöglicht es Ihnen, den Inhalt des eMail-Körpers zu überprüfen.

Beispiel:

if body :contains "Wichtige Informationen" 
{ 
    fileinto "Wichtig"; 
}

6. Negation (NICHT)

Mit dem not-Operator können Sie eine Bedingung verneinen.

Beispiel:

if not address :is "from" "info@email.de" 
{ 
    fileinto "Inbox"; 
}

Dies sind grundlegende Möglichkeiten zur Verwendung des if-Befehls in Sieve. Die genaue Syntax und verfügbaren Bedingungen können je nach der Sieve-Implementierung variieren. Es ist ratsam, die Dokumentation der spezifischen Sieve-Engine zu konsultieren, die Sie verwenden, um detailliertere Informationen zu erhalten.


Beispiele

eMails von einem bestimmten Absender in einen Ordner verschieben

In diesem Beispiel wird die fileinto-Aktion verwendet, um eMails von einem bestimmten Absender in einen Ordner zu verschieben. Die require-Anweisung aktiviert die imap4flags-Erweiterung für die Verwendung von IMAP-Flags.

require ["imap4flags"]; 
if address :is "from" "info@email.de" 
{ 
    fileinto "Important"; 
    addflag "\\FlagName"; 
}
  • Das Skript erfordert die imap4flags-Erweiterung.
  • Wenn die Absenderadresse mit “info@email.de” übereinstimmt, wird die eMail in den Ordner “Important” verschoben, und es wird das IMAP-Flag mit dem Namen “FlagName” hinzugefügt.

eMails mit einem bestimmten Betreff und Text im Inhalt ablehnen

Hier wird die reject-Aktion verwendet, um eMails mit einem bestimmten Betreff und Text im Körper abzulehnen.

require ["reject"]; 
if allof (header :contains "Subject" "Spam", body :contains "Wir schenken Dir") 
{ 
    reject "Diese Nachricht sieht nach SPAM aus!"; 
}
  • Das Skript erfordert die reject-Erweiterung.
  • Wenn sowohl der Betreff “Spam” enthält als auch der Körper den Text “Wir schenken Dir” enthält, wird die eMail mit einer Ablehnungsnachricht abgelehnt.

Diese Beispiele sollen die Verwendung von require und if-Bedingungen in Sieve-Skripten illustrieren. Es ist wichtig zu beachten, dass die Verfügbarkeit von Erweiterungen und das genaue Verhalten von Bedingungen von der konkreten Sieve-Implementierung abhängen können. Daher ist es ratsam, die Dokumentation der Sieve-Engine zu konsultieren, die verwendet wird

eMails von bestimmten Domains direkt löschen

Es gibt bekannte Domains, die von SPAM Firmen stammen. Diese nutzen zusätzlich Subdomains, die sich ständig ändern. Um diese eingehenden Nachrichten direkt zu löschen, kann man mit Platzhaltern arbeiten.

if address :domain :matches "from" ["*.preis-checker.net", "*.enlinea-media.de", "*.mycheck.de"]
{
    discard;
}
  • In diesem Fall wird kein require benötigt, da discard im Sieve Standard enthalten ist.
  • Alle Mails, die von Subdomains der Domains preis-checker.net, enlinea-media.de und mycheck.de kommen, werden sofort verworfen.

Filter für Newsletter

In diesem Beispiel werden eMails von bestimmten Absendern, die im Betreff das Wort “Newsletter” enthalten, in einen speziellen Ordner verschoben und mit dem Flag “Gelb” markiert.

require ["imap4flags"]; 
if allof (address :is "from" "newsletter@email.de", header :contains "Subject" "Newsletter") 
{ 
    fileinto "Newsletter"; 
    addflag "\\FlagYellow"; 
}
  • Das Skript erfordert die imap4flags-Erweiterung.
  • Wenn die eMail von der Adresse “newsletter@email.de” stammt und im Betreff das Wort “Newsletter” enthält, wird sie in den Ordner “Newsletter” verschoben und mit dem IMAP-Flag “FlagYellow” markiert.

Filter für wichtige Kontakte

Hier wird eine komplexe Bedingung verwendet, um eMails von wichtigen Kontakten zu markieren und in verschiedene Ordner zu verschieben.

require ["imap4flags"]; 
if anyof ( allof (address :is "from" "chef@email.de", header :contains "X-Priority" "high"), allof (address :is "from" "co-chef@email.de", header :contains "Subject" "Wichtig") ) 
{ 
    fileinto "Wichtig"; 
    addflag "\\RedFlag"; } 
else 
{ 
    fileinto "Inbox"; 
}
  • Das Skript erfordert die imap4flags-Erweiterung.
  • Wenn die eMail entweder von “chef@email.de” stammt und im Header “X-Priority” den Wert “high” hat, oder von “co-chef@email.de” stammt und im Betreff das Wort “Wichtig” enthält, wird die eMail in den Ordner “Wichtig” verschoben und mit dem IMAP-Flag “RedFlag” markiert. Andernfalls wird sie in den regulären “Inbox”-Ordner verschoben.

Natürlich, hier sind zwei etwas komplexere Beispiele für Sieve-Filter, die verschiedene Bedingungen und Aktionen kombinieren:

Diese Beispiele sollen die Flexibilität und die verschiedenen Möglichkeiten der Sieve-Skript-Syntax verdeutlichen. Je nach den spezifischen Anforderungen können Bedingungen und Aktionen kombiniert werden, um eMails auf unterschiedliche Weisen zu filtern und zu organisieren.


Zusammenfassung

Sieve ist eine mächtige und flexible Skriptsprache für die eMail-Filterung:

  • Regelbasierte Filterung: Sieve ermöglicht es, eMail-Filterregeln zu definieren, die auf verschiedenen Kriterien basieren, wie Absender, Betreff, Inhalt und mehr.
  • Serverseitige Filterung: Die Filter werden auf dem eMail-Server angewendet, bevor die eMails im Posteingang des Nutzers erscheinen, was die Verwaltung von eMails effizienter macht.

Grundlegende Sieve-Syntax:

  • if-Bedingungen: Sieve-Regeln bestehen in der Regel aus if-Bedingungen, die festlegen, wann eine Regel angewendet werden soll.
  • Aktionen: Verschiedene Aktionen wie fileinto (Verschieben in Ordner), discard (Löschen), reject (Ablehnen) werden verwendet, um mit eMails basierend auf den Bedingungen zu interagieren.

Sieve-Erweiterungen:

  • Require-Befehl: Mit require können Sie bestimmte Sieve-Erweiterungen aktivieren, um erweiterte Funktionen wie das Hinzufügen von Flags, Ablehnen von eMails und mehr zu ermöglichen.

Bedingungen und Operatoren:

  • Verschiedene Bedingungstypen: Sieve bietet Bedingungen für Absender, Empfänger, Header, Body und mehr.
  • Logische Operatoren: Sie können allof (UND), anyof (ODER) und not (NICHT) verwenden, um komplexe Bedingungen zu erstellen.

Beispiele für Sieve-Anwendungen:

  • Filtern von eMails: Sieve ermöglicht das Organisieren von eMails basierend auf verschiedenen Kriterien wie Absender, Betreff, Inhalt usw.
  • Spam-Filter: Sieve kann dazu verwendet werden, Spam zu erkennen und zu filtern, indem bestimmte Bedingungen für verdächtige eMails festgelegt werden.
  • Automatisches Ablehnen oder Markieren: Sieve kann so konfiguriert werden, dass eMails automatisch abgelehnt oder markiert werden, je nach den definierten Regeln.

Fazit

Sieve ist eine leistungsfähige und standardisierte Methode für die serverseitige Filterung von eMails. Die Syntax ermöglicht eine klare Definition von Regeln und Aktionen, um eMails automatisch zu organisieren und zu verarbeiten. Durch die Verwendung von require können erweiterte Funktionen aktiviert werden, um spezifische Anforderungen zu erfüllen. Es ist wichtig, die Dokumentation der jeweiligen Sieve-Implementierung zu konsultieren, um die verfügbaren Funktionen und Syntaxdetails zu verstehen. Insgesamt bietet Sieve eine effektive Möglichkeit, die eMail-Verwaltung zu automatisieren und individuelle Präferenzen anzupassen.


Quellen:

http://sieve.info
https://www.rfc-editor.org/rfc/rfc5228.html
https://www.rfc-editor.org/rfc/rfc5230.html
https://www.rfc-editor.org/rfc/rfc5788.html
https://www.rfc-editor.org/rfc/rfc3894.html

Abonnieren
Benachrichtige mich bei
0 Comments
Älteste
Neueste
Inline-Feedbacks
Alle Kommentare anzeigen
Nach oben scrollen