Mail Einführung in Filtern mit Sieve

IMT:HilfeWiki - das Wiki
Wechseln zu: Navigation, Suche
Information
Allgemeine Informationen
Informationen
Betriebssystem Alle
Service Mail
Interessant für Angestellte, 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 ["{SPAM?}", "{SPAM!}", "{SPAM!!}"] #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 "Spam"; #Entspricht dem Unterordner "Spam" fileinto "Spam.Sicher"; #Entspricht dem Unterordner Sicher des Unterordners Spam

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.";

  1. 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.";

  1. 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-Spam-Score", "X-Spam-Status", "X-Spam-Flag", "X-Spam-Level"] ["Yes", "YES", "yes", "sss", "\*\*\*", "\+\+\+\+\+"] { fileinto "Spam.Sicher"; } elsif header :contains ["X-IMT-Spam-Score", "X-Spam-Level"] ["ss", "\*\*", "\+\+"] { fileinto "Spam.Vielleicht"; } else { keep; }

In diesem Beispiel wird geguckt, ob im Header der E-Mail eines der gängigen Anti-Spam-Programme eine Botschaft hinterlassen hat. Enthält eines der Felder "X-IMT-Spam-Score", "X-Spam-Status", "X-Spam-Flag" oder "X-Spam-Level" einen der angebenen Werte "Yes", "YES", "yes", "sss", "***" oder "+++++", wird die E-Mail in den Unterodner Sicher des Unterordners Spam geschoben. Zu beachten ist, dass die Werte der Listen jeweils mit einem ODER verkettet sind. Das heißt, dass z. B. "X-IMT-Spam-Score" auf "Yes", "YES" usw. überprüft wird, ebenso wie "X-Spam-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


Bei Fragen oder Problemen wenden Sie sich bitte an die IMT:Benutzerberatung

Notebook-Café BI1.111 IMT:ServicePoint N5.345 Tel.: +49 (5251) 60-5544 E-Mail: imt@uni-paderborn.de