Mail - Einführung in Filtern mit Sieve
Allgemeine Informationen | |
---|---|
Informationen | |
Betriebssystem | Alle |
Service | |
Interessant für | Bereiche, Gäste und Studierende |
HilfeWiki des IMT der Uni Paderborn |
Was ist Sieve?
Sieve ist eine im RFC 3028 (http://www.ietf.org/rfc/rfc3028.txt) spezifizierte Skriptsprache zur serverseitigen Filterung von E-Mails. Für jede ankommende E-Mail werden ein auf dem Server abgelegtes Skript aufgerufen und jede Anweisung abgearbeitet sowie entsprechende Aktionen durchgeführt. Diese Aktionen beschränken sich im Wesentlichen auf:
keep: Die E-Mail wird (in der Inbox) behalten. discard: Die E-Mail wird kommentarlos gelöscht. redirect: Die E-Mail wird an eine andere Adresse weitergeleitet. reject: Die E-Mail wird abgelehnt - meist bekommt der Sender eine entsprechende Nachricht. fileinto: Die E-Mail wird in einen bestimmten Ordner abgelegt. vacation: Eine Abwesenheitsmeldung wird generiert.
Es gibt noch weitere Aktionen, die in zusätzlichen RFCs definiert sind, z. B. das Setzen von IMAP-Flags oder die Benutzung von regulären Ausdrücken.
Datentypen
Sieve kennt nur drei Datentypen: numerische Werte, Zeichenketten sowie eine Liste von Zeichenketten.
Numerische Werte
Die numerischen Werte dürfen mit K, M oder G auch auf Multiplikatoren enden, wobei zu beachten gilt, dass z. B. K für kibi- und nicht für kilo- steht (also 1024 anstelle von 1000 bedeutet). Entsprechendes gilt für M und G ebenfalls. Beispiele: 42 23M (entspricht 23 Megabyte)
Zeichenketten
Zeichenketten sind immer von zwei Anführungsstrichen (") eingeschlossen. Soll innerhalb der Zeichenkette ein Anführungsstrich verwendet werden, so ist er mit einem vorangestellten Backslash (\) zu maskieren. Dies führt dazu, dass, wenn der Backslash als Zeichen verwendet werden soll, ebenfalls noch einmal durch ein Backslash maskiert werden muss. Ebenfalls maskiert werden müssen z. B. + und *. Beispiele: "Test" "test@uni-paderborn.de" "Das ist eine \"Testnachricht\"" #Für: "Das ist eine Testnachricht" "Und so sieht ein \\ (Backslash) aus." #Für: Und so sieht ein \ (Backslash) aus
Listen von Zeichenketten
Zeichenkettenlisten sind in dem meisten Fällen als logische ODER-Verknüpfungen zu sehen. Sie werden von eckigen Klammern umschlossenen, deren Inhalt aus kommaseparierten Zeichenketten besteht. Hat eine Liste nur ein Element, dürfen die Klammern weggelassen werden. Beispiele: ["test@uni-paderborn.de", "test@upb.de"] #Liste von E-Mail-Adressen ["{SPAMUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.?}", "{SPAMUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.!}", "{SPAMUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.!!}"] #Liste von Spamausdrücken, die im Subject vorkommen können "test@uni-paderborn.de" #Eine Liste mit nur einem Element
Syntax
keep
Die Aktion "keep" besagt, dass eine Mail auf jeden Fall behalten werden soll. Ein ausdrückliches keep ist z. B. nach einem redirect notwendig.
discard
Eine Mail, die "discarded" wird, wird sofort gelöscht. Diese Aktion ist mit Vorsicht zu genießen, da weder Empfänger noch Sender darüber benachrichtigt werden. Eine nachträgliche Wiederherstellung durch das IMT ist ebenso nicht möglich!
redirect
Mit redirect können E-Mails an eine andere Adresse weiter-, aber auch umgeleitet werden.
Syntax: redirect <address: string>
Soll eine E-Mail an mehrere Adressen weitergeleitet werden, bedarf es jeweils eine gesonderten redirect-Anweisung. Bitte passen Sie auf, dass Sie keine Mailschleifen bauen (z. B. Adresse A leitet an Adresse B weiter. Adresse B leitet an Adresse A weiter ...)! Beispiele: Die E-Mail wird nur nach test@uni-paderborn.de weitergeleitet. redirect test@uni-paderborn.de;
Um die E-Mail auch selbst im Postfach zu behalten, ist ein explizites "keep" notwendig: redirect test@uni-paderborn.de; keep;
Eine Weiterleitung an 2 Adressen sowie das Behalten der E-Mail. redirect test@uni-paderborn.de; redirect test2@uni-paderborn.de; keep;
reject
Durch ein Reject können Sie eine E-Mail mit Benachrichtigung des Absenders ablehnen. Das ist in den meisten Fällen einem discard vorzuziehen. Aber auch hier gilt es vorsichtig zu sein - eine Wiederherstellung durch das IMT ist nicht möglich!
Syntax: reject <reason: string>
Da require ein eigenes Sieve-Modul darstellt, welches im Normalfall nicht geladen wird, ist es mit der Anweisung 'require "reject";' am Anfang des Skriptes nachzuladen. Danach kann die Aktion genutzt werden. Beispiel: reject "Von Dir nehme ich keine Mails mehr an!";
fileinto
Die wahrscheinlich am häufigsten benutzte Aktion stellt "fileinto" dar, da es eine Vorsortierung in verschiedene Unterordner erlaubt.
Syntax: fileinto <folder: string>
Auch hier handelt es sich um ein nachzuladenes Zusatzmodul, welches erst nach einem 'require "fileinto";' benutzbar ist. Beispiele: fileinto "SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt."; #Entspricht dem Unterordner "SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt." fileinto "SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt..Sicher"; #Entspricht dem Unterordner Sicher des Unterordners SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.
Da Sieve keine Ordner anlegt, müssen die Ordner bereits vorab bestehen. Kann Sieve den angegebenen Ordner nicht finden, so wird die E-Mail in der INBOX abgelegt - ein Datenverlust findet also nicht statt.
vacation:
Die Syntax von vacation ist etwas komplizierter. Wenn Sie nur eine einfache Urlaubsbenachrichtigung einrichten wollen, benutzen Sie dazu bitte das Serviceportal des IMT (https://serviceportal.uni-paderborn.de). Dort finden Sie unter dem Punkt "E-Mail Einstellungen" eine entsprechende Maske.
Sollte das Ihren Wünschen nicht genügen, können Sie sie auch manuell anlegen. Zuerst müssen Sie wieder mit 'require "vacation";' das Modul nachladen.
Syntax: vacation [":days" number] [":addresses" string-list] [":subject" string] [":mime"] <reason: string>
Der ":days"-Parameter gibt an, wie oft der Absender eine Benachrichtigung erhalten soll. Steht der Wert etwa auf 7, so erhält er am ersten Tag auf seine erste Mail an Sie eine Abwesenheitsbenachrichtigung. Auf sämtliche nachfolgende Mails in den nächsten 7 Tagen an Sie erhält er jedoch keine Benachrichtigung. Am achten Tage würde wieder eine Benachrichtigung verschickt. Der kleinstmögliche Wert ist hier 1, was eine Benachrichtigung am Tag bedeuten würde.
Mit ":addresses" können Sie angeben, ob nur bei Mails an bestimmte E-Mail-Adressen eine Antwort generiert werden soll. Bei Fehlen des Paramters wird immer eine Nachricht verschickt.
Durch den ":subject"-Parameter können Sie einen eigenen Betreff angeben. Bei Fehlen des Parameters wird der Original Betreff mit einem vorangestelltem "Re:" verwendet.
Mit der Angabe von ":mime" können Sie den Typ der Mail (normalerweise Text) angeben.
Beispiele: vacation :days 7 "Herr X. ist in der Zeit von .. zum .. nicht erreichbar.";
- Jeder Absender bekommt maximal einmal in 7 Tagen eine Benachrichtigung.
vacation :days 7 :addresses ["test@uni-paderborn.de"] "Herr X. ist in der Zeit von .. zum .. nicht erreichbar.";
- Jeder Absender, der an "test@uni-paderborn.de" geschrieben hat, bekommt maximal einmal in 7 Tagen eine Benachrichtigung.
Require-Anweisung
Mehrere require-Anweisungen lassen sich zusammenfassen. Ein require "fileinto"; require "reject"; kann also zu einem require ["fileinto", "reject"]; zusammengefasst werden. Die require-Anweisung muss immer an der ersten Stelle im Skript stehen!
Abfragestrukturen
Die wenigsten Anweisungen würden Sinn ergeben, wenn man nicht Abfragestrukturen verwenden könnte. Sieve kennt hier die if-Abfrage.
Syntax: if <test1: test> <block1: block> Syntax: elsif <test2: test> <block2: block> Syntax: else <block>
Als Tests sind folgende Werte erlaubt: "address", "allof", "anyof", "exists", "false", "header", "body", "envelope", "not", "size", und "true"
Für die genaue Verwendung der einzelnen Tests werfen Sie bitte einen Blick in das RFC (http://www.ietf.org/rfc/rfc3028.txt), da eine vollständige Dokumentation den Umfang dieser Ausführungen sprengen würde.
So beschränken wir uns hier einmal auf ein Beispiel zur Spamabwehr: require ["fileinto"];
if header :contains ["X-IMT-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Score", "X-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Status", "X-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Flag", "X-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Level"] ["Yes", "YES", "yes", "sss", "\*\*\*", "\+\+\+\+\+"] { fileinto "SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt..Sicher"; } elsif header :contains ["X-IMT-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Score", "X-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Level"] ["ss", "\*\*", "\+\+"] { fileinto "SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt..Vielleicht"; } else { keep; }
In diesem Beispiel wird geguckt, ob im Header der E-Mail eines der gängigen Anti-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Programme eine Botschaft hinterlassen hat. Enthält eines der Felder "X-IMT-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Score", "X-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Status", "X-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Flag" oder "X-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Level" einen der angebenen Werte "Yes", "YES", "yes", "sss", "***" oder "+++++", wird die E-Mail in den Unterodner Sicher des Unterordners SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt. geschoben. Zu beachten ist, dass die Werte der Listen jeweils mit einem ODER verkettet sind. Das heißt, dass z. B. "X-IMT-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Score" auf "Yes", "YES" usw. überprüft wird, ebenso wie "X-SpamUnerwünschte Nachrichten oder E-Mails die Massenhaft versendet werden mit Werbung oder störenden Inhalt.-Status" usw. Ebenfalls zu beachten ist die Maskierung der Zeichen + (\+) und * (\*), welche notwendig ist, da die Zeichen sonst eine "Wildcard"-Funktion bekommen würden.
Weitere Informationen
Sieve Homepage (englisch) http://www.cyrusoft.com/sieve/ Sieve RFC 3028 (englisch) http://www.ietf.org/rfc/rfc3028.txt