Unterschiede zwischen den Revisionen 6 und 7
Revision 6 vom 2013-02-20 14:33:23
Größe: 10763
Autor: vwilden
Kommentar:
Revision 7 vom 2013-02-20 15:20:22
Größe: 13313
Autor: vwilden
Kommentar:
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 127: Zeile 127:
Sieve Filter werden in Sets zusammengefasst. Jedes Set beinhaltet die wie oben beschriebenen Filter. Wer unter bestimmten Bedingungen völlig andere Sieve Regeln benötigt, braucht nicht jedes Mal neue Filter anlegen und alte löschen. Stattdessen kann einfach ein weiteres Set angelegt und aktiviert werden. Sieve Filter werden in Sets zusammengefasst. Jedes Set beinhaltet die wie oben beschriebenen Filter. Wer unter bestimmten Bedingungen völlig andere Sieve Regeln benötigt, braucht nicht jedes Mal neue Filter anlegen und alte löschen. Stattdessen kann einfach ein weiteres Set angelegt und aktiviert werden. Mit einem Klick auf das Zahnradsymbol am unteren Rand der mittleren Spalte werden neben diversen Optionen auch alle Skript-Sets angezeigt.

{{attachment:sieve-05.jpg}}

Das derzeit ausgewählte Regelset, welches bearbeitet wird erscheint '''fett''' geschrieben in der Liste. Zum wechseln der Sets muss einfach auf den entsprechenden Namen geklickt werden. '''Damit ein Sieve Skript aktiv wird, muss "Activate this ruleset" auf den Skript angewendet werden!''' Ansonsten wird der Skript nicht ausgeführt. Es kann zur Zeit immer nur ein Regelset aktiv sein.

Ist ein Set ausgewählt, kann es mit "Delete this ruleset" gelöscht und mit "Rename this ruleset" umbenannt werden. Mit "Create a new ruleset" wird ein neuer Satz Sieve-Filter angelegt. Nach Eingabe des Set-Namens kann mit der Bearbeitung neuer Filter begonnen werden.
Zeile 130: Zeile 136:

Nutzer die ihre Sieve Skripte selbst schreiben möchten nutzen bitte den Modus "Advanced Editor". Das Anlegen der Regel-Sets erfolgt wie beim grafischen Anlegen der Sieve Skripte. Die Regeln werden nun allerdings selbst geschrieben und können im Nachhinein unter Umständen '''nicht mehr vom grafischen Editiermodus ausgelesen werden'''.

{{attachment:sieve-06.jpg}}

Vor dem Wechseln zum "Advanced Editor" wird nochmals darauf hingewiesen, dass selbst geschriebene Sieve Regeln vom grafischen Editiermodus nicht ausgelesen werden könnten. Dies muss bestätigt werden.

{{attachment:sieve-07.jpg}}

Ein im "Advanced Editor" geschriebener Sieve Skript sollte nur von diesem bearbeitet werden, es könnten Informationen verloren gehen wenn versucht wird den Skript mit der grafischen Lösung zu speichern. Es empfiehlt sich das Anlegen eines neuen, leeren Regel-Sets, wenn doch der grafische Editiermodus genutzt werden soll.

In dem nun zu sehenen Textfeld kann der Sieve Skript geschrieben bzw. reinkopiert werden. Mit einem Klick auf "Save" wird die Änderung gespeichert.

{{attachment:sieve-08.jpg}}

Das Plugin wird beim Speichern versuchen den Sieve Skript zu kompilieren und entsprechendes Feedback geben. Erscheint die Meldung:

`"test" ACTIVE`<<BR>>
`OK "Listscripts completed."`

... wurde der Skript erfolgreich kompiliert und ist fehlerfrei.

Erscheint allerdings folgende Meldung:

{{attachment:sieve-09.jpg}}

... ist der Sieve Skript fehlerhaft und sollte noch einmal überprüft werden. Es wird empfohlen die Sieve Skript immer außerhalb des Textfeldes zu erststellen und bei Fertigstellung in das Formular zu kopieren und Informationsverlust ausschließen zu können.

Sieve

Die Sieve Filtersprache ermöglicht das Erstellen von Mailfiltern auf dem neuen Mailsystems des FB3, mit Hilfe von Skripten, die nach einem einfachen Prinzip aufgebaut sind. Dieser Tutorial soll für diejenigen, die Sieve Skripte selbst schreiben möchten, einen kleinen Einblick in die Filtersprache geben. Um Filter zu erstellen, ohne sich mit der Skriptsprache auseinander setzen zu müssen, kann das Webinterface verwendet werden. Selbst geschriebene Skripte werden damit ebenfalls angelegt.

Sieve Module

Für jede Aktion, wie z.B. das Verschieben von E-Mails in einen IMAP Ordner oder das automatische Markieren von Nachrichten als gelesen, muss ein entsprechendes Modul bzw. Erweiterung geladen werden. Dies geschieht einmalig im Kopf einer Sieve Skript-Datei. Ist ein Modul vorhanden und geladen, kann es beliebig oft im Skript verwendet werden.

Folgende Module / Erweiterungen sind derzeit verfügbar:

fileinto

Speichern von Nachrichten in IMAP Ordner

envelope

E-Mail Envelope Einträge untersuchen (z.B. Sender und Empfänger)

encoded-character

Spezielle Zeichen numerisch enkodieren

copy

Speichern weitergeleiteter Nachrichten

body

Den Body einer E-Mail untersuchen

variables

Variablen Unterstützung von Sieve nutzen

vacation

Automatische E-Mail Antwort bei Abwesenheit

vacation-seconds

Vacation Erweiterung zum erneuten Senden von Vacation Nachrichten nach Sekunden und nicht nach Tagen

relational

Relationale Abfragen im Sieve Skript

imap4flag

Setzen von IMAP Flags in Nachrichten (z.B. als "gelesen" markieren)

subaddress

Prüfen von Einträgen im local-part der Adresse

reject

Mails mit einer Nachricht abweisen

enotify

Senden von Notifications

mailbox

Prüfen ob IMAP Folder existieren und Anlegen neuer

environment

Auslesen von Informationen über den Sieve Interpreter

date

Zeit- und Datums-Einträge abfragen

regex

Regular Expression support von Sieve nutzen

editheader

Hinzufügen und Entfernen und Header Einträgen in Nachrichten

ihave

Sieve Module / Erweiterungen auf Support und Verwendung abfragen

include

Weitere Sieve Skripte inkludieren

Die erste Zeile eines Sieve Skriptes enthält dann require ["Modulname1", "Modulname2"] um die entsprechenden Erweiterungen verwenden zu können.

Weitere Informationen zu den Sieve Erweiterungen befinden sich im Dovecot Wiki.

Aufbau eines Sieve Skriptes

Anhand von diesem Beispiel-Skript soll der Aufbau und die Befehle von Sieve Skripten gezeigt werden:

require ["regex", "fileinto", "imap4flags", "mailbox"];

/*
   Suche nach "YES" im Header der Mail in der Zeile mit "X-Spam-Flag" und lege Mail
   im Spam-Verzeichnis ab, wenn Eintrag gefunden wurde.
*/

if allof (header :contains "X-Spam-Flag:" "YES") { 

    setflag "\\Seen";

    # In den IMAP Ordner "Spamverdacht" verschieben
    fileinto "Spamverdacht";

   # Skriptausführung anhalten
    stop;
 }

# In der Zeile "Subject" des Mail-Headers nach "Newsletter" suchen. Wenn gefunden,
# Mail in den IMAP Ordner "Newsletter", wenn dieser existiert.

if header :contains "Subject" "Newsletter" {
    if mailboxexists "Newsletter" {
        fileinto "Newsletter";
        stop;
    } else {
        fileinto "INBOX";
        stop;
    }
}

Jeder Skript kann, wie im Beispiel mit ein- oder mehrzeiligen Kommentaren versehen werden:

# Einzeiliger Kommentar, beginnend mit einem Hash
/* Mehrzeiliger Kommentar, beginnend mit einem Slash, gefolgt von
einem Asterisk, endend mit einem Asterisk und Slash.*/

Die erste Zeile des Skriptes lädt mit "require" alle notwendigen Sieve-Erweiterungen zur Ausführung des Skriptes. Diese sind in diesem Beispiel "regex" zum Einsatz von regulären Ausdrücken, "fileinto" zum Speichern von E-Mails in IMAP Ordnern, "imap4flags" zum Setzen von IMAP Flags bei Nachrichten und "mailbox" um Existenz von IMAP Ordnern abzufragen.

Mit einfachen, aber auch verschachtelten Bedingungen können nun Nachrichten ausgewertet werden. Die erste Abfrage überprüft mit der Regex-Erweiterung ob im Header der eintreffenden E-Mails das Wort "YES" in einer Zeile mit "X-Spam-Flag:" vorhanden ist. "if" leitet die Abfrage ein. Das "allof" bedeutet, dass alle Bedingungen der Abfrage erfüllt sein müssen.
Funktionen in einer Bedingung, werden mit geschweiften Klammern "{" und "}" zusammen gefasst. Nur Aktionen innerhalb dieser Klammern werden beim Zutreffen einer Bedingung in einer if-Abfrage ausgeführt. Funktionen müssen mit einem Semikolon ";" abgeschlossen werden.

Mit setflag "\\Seen"; wird die Nachricht als gelesen markiert. "fileinto" verschiebt die Nachricht in einen vorhandenen IMAP-Ordner. Damit keine weiteren Abfragen mehr ausgeführt werden, wenn die Bedingung erfüllt ist, wird die Skriptausführung mit einem "stop;" beendet.

Die "stop;" -Anweisung stoppt die weitere Ausführung des Sieve Skriptes. Ohne ein Stop, würden alle folgenden Abfragen ausgeführt werden bis das Ende des Skriptes oder ein "stop;" erreicht wird. Dies ist dann nützlich, wenn viele verschiedene Abfragen nacheinander / unabhängig voneinander aufgerufen werden sollen.

Die zweite Abfrage im Skript ist ein wenig komplexer. Zuerst wird geprüft, ob sich im Header in der Subject-Zeile der Nachricht das Wort "Newsletter" befindet. Danach kommt eine weitere, verschachtelte Abfrage, wenn "Newsletter" im Betreff vorhanden ist. Sie prüft mit mailboxexists ob der IMAP Ordner "Newsletter" existiert. Wenn ja, wird die Nachricht dort hinein verschoben. Existiert der Ordner nicht, wird mit else die Alternative ausgeführt. In diesem Fall landet die Nachricht dann in der INBOX. Die else-Anweisung ist überflüssig, da Nachrichten automatisch in der Inbox landen, wenn keine Sieve regeln zutreffen. Sie dient hier zur Veranschaulichung.

Weitere Beispiele und Informationen zu Sieve befinden sich im deutschen Wikipedia Artikel sowie in der Tutorial-Sektion auf sieve.info.

Vergleich von Procmail und Sieve

Diese Beispiele ziegen die Umsetzung einiger Procmail Skripte in einen äquivalenten Sieve-Skript.

Procmail

Sieve

Funnktion

:0
* ^Subject:.*Dovecot.*
|/usr/local/bin/dmail +Dovecot

if header :contains "Subject" "[Dovecot]" {
        fileinto "Dovecot";
        stop;
}

Wenn sich im Betreff der Mail "[Dovecot]" befindet, wird die Nachricht in den IMAP Ordner "Dovecot" verschoben.

:0
* ^From: spam@addresse.de
/dev/null

if header :contains "From:" "spam@addresse.de" {
        discard;
        stop;
}

Wenn die Absenderadresse "spam@adresse.de" ist, wird die Nachricht verworfen.

:0:
* ^(From|Reply-To|Return-Path): .*@spamaddresse.de
|/usr/local/bin/dmail +Spamverdacht

if anyof (header :contains ["From", "Reply-To", "Return-Path"] "@spamaddresse.de")
{
        fileinto "Spamverdacht";
        stop;
}

Wenn die Absender-, die Antwort- oder Weg-Adresse "@spamaddresse.de" enthält, wird die Nachricht in den IMAP Ordner "Spamverdacht" verschoben.

Verwendung der Weboberfläche

Die Webmail Instanz des FB3 ist mit einem Plugin ausgestattet, welches eine Weboberfläche zum Verwalten und Editieren von eigenen Sieve Skripten ermöglicht. Nach dem erfolgreichen Login ist die Filter-Verwaltung unter "Settings" und dort unter "Filters" zu erreichen.

sieve-01.jpg

Sieve Regeln grafisch anlegen

Filter erstellen

Beim ersten Aufrufen der Weboberfläche befinden sich noch keine Filter, sodass folgende Meldung erscheint:

sieve-02.jpg

Mit einem klicken auf die mit dem roten Pfeil markierte Schaltfläche "Use default filters" wird ein neues Regelset angelegt. Dieses ist leer und trägt den aktuellen Nutzernamen als Bezeichnung. Nun hat man die Möglichkeit eine neue Sieve Regel aufzustellen. Dies geschieht mit dem Plus-Button ganz unten links in der mittleren Spalte.

sieve-03.jpg

Nun können ganz intuitiv Sieve Regeln zum filtern in der rechten Spalte auf der Seite angelegt werden. Hierzu wählt man zuerst einen Filternamen und definiert dann unter "Filter Rules" eine oder mehrere Bedingungen bei der die Regel angewendet werden soll. Die "Filter Actions" sind Aktionen die ausgeführt werden wenn die Bedingung(en) zutrifft. Mit einem Klick auf "Save" wird die Regel gespeichert und erscheint dann in der mittleren Spalte, in der Filterliste.

sieve-04.jpg

Man kann nun noch weitere Filter hinzufügen, indem wieder auf den Plus-Button geklickt und dann ein weiterer Filter definiert wird.

Filtersets verwalten

Sieve Filter werden in Sets zusammengefasst. Jedes Set beinhaltet die wie oben beschriebenen Filter. Wer unter bestimmten Bedingungen völlig andere Sieve Regeln benötigt, braucht nicht jedes Mal neue Filter anlegen und alte löschen. Stattdessen kann einfach ein weiteres Set angelegt und aktiviert werden. Mit einem Klick auf das Zahnradsymbol am unteren Rand der mittleren Spalte werden neben diversen Optionen auch alle Skript-Sets angezeigt.

sieve-05.jpg

Das derzeit ausgewählte Regelset, welches bearbeitet wird erscheint fett geschrieben in der Liste. Zum wechseln der Sets muss einfach auf den entsprechenden Namen geklickt werden. Damit ein Sieve Skript aktiv wird, muss "Activate this ruleset" auf den Skript angewendet werden! Ansonsten wird der Skript nicht ausgeführt. Es kann zur Zeit immer nur ein Regelset aktiv sein.

Ist ein Set ausgewählt, kann es mit "Delete this ruleset" gelöscht und mit "Rename this ruleset" umbenannt werden. Mit "Create a new ruleset" wird ein neuer Satz Sieve-Filter angelegt. Nach Eingabe des Set-Namens kann mit der Bearbeitung neuer Filter begonnen werden.

Sieve Skripte selbst schreiben

Nutzer die ihre Sieve Skripte selbst schreiben möchten nutzen bitte den Modus "Advanced Editor". Das Anlegen der Regel-Sets erfolgt wie beim grafischen Anlegen der Sieve Skripte. Die Regeln werden nun allerdings selbst geschrieben und können im Nachhinein unter Umständen nicht mehr vom grafischen Editiermodus ausgelesen werden.

sieve-06.jpg

Vor dem Wechseln zum "Advanced Editor" wird nochmals darauf hingewiesen, dass selbst geschriebene Sieve Regeln vom grafischen Editiermodus nicht ausgelesen werden könnten. Dies muss bestätigt werden.

sieve-07.jpg

Ein im "Advanced Editor" geschriebener Sieve Skript sollte nur von diesem bearbeitet werden, es könnten Informationen verloren gehen wenn versucht wird den Skript mit der grafischen Lösung zu speichern. Es empfiehlt sich das Anlegen eines neuen, leeren Regel-Sets, wenn doch der grafische Editiermodus genutzt werden soll.

In dem nun zu sehenen Textfeld kann der Sieve Skript geschrieben bzw. reinkopiert werden. Mit einem Klick auf "Save" wird die Änderung gespeichert.

sieve-08.jpg

Das Plugin wird beim Speichern versuchen den Sieve Skript zu kompilieren und entsprechendes Feedback geben. Erscheint die Meldung:

"test" ACTIVE
OK "Listscripts completed."

... wurde der Skript erfolgreich kompiliert und ist fehlerfrei.

Erscheint allerdings folgende Meldung:

sieve-09.jpg

... ist der Sieve Skript fehlerhaft und sollte noch einmal überprüft werden. Es wird empfohlen die Sieve Skript immer außerhalb des Textfeldes zu erststellen und bei Fertigstellung in das Formular zu kopieren und Informationsverlust ausschließen zu können.

Sieve (zuletzt geändert am 2013-03-07 12:46:10 durch jbrandt)