Größe: 7596
Kommentar:
|
Größe: 8442
Kommentar:
|
Gelöschter Text ist auf diese Art markiert. | Hinzugefügter Text ist auf diese Art markiert. |
Zeile 4: | Zeile 4: |
<<TableOfContents()>> |
|
Zeile 24: | Zeile 26: |
||[[http://tools.ietf.org/html/rfc5490#section-3|mailbox]] ||Preufen ob IMAP Folder existieren und Anlegen neuer|| ||[[http://tools.ietf.org/html/rfc5183/|environment]] ||Testen von Werten mit dem Environment der Ausführung|| |
||[[http://tools.ietf.org/html/rfc5490#section-3|mailbox]] ||Prüfen ob IMAP Folder existieren und Anlegen neuer|| ||[[http://tools.ietf.org/html/rfc5183/|environment]] ||Auslesen von Informationen über den Sieve Interpreter|| |
Zeile 34: | Zeile 36: |
Weitere Informationen zu den Sieve Erweiterungen befinden sich im [[http://wiki2.dovecot.org/Pigeonhole/Sieve|Dovecot Wiki]]. |
|
Zeile 40: | Zeile 44: |
`\*`<<BR>> | `/*`<<BR>> |
Zeile 72: | Zeile 76: |
`\* Mehrzeiliger Kommentar, beginnend mit einem Backslash, gefolgt von`<<BR>> | `/* Mehrzeiliger Kommentar, beginnend mit einem Slash, gefolgt von`<<BR>> |
Zeile 82: | Zeile 86: |
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 "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 [[http://de.wikipedia.org/wiki/Sieve|deutschen Wikipedia Artikel]] sowie in der Tutorial-Sektion auf [[http://sieve.info/tutorials|sieve.info]]. |
Zeile 90: | Zeile 98: |
||`:0`<<BR>>`* ^From: spam@addresse.de`<<BR>>`/dev/null`||`if header :contains "From:" "spam@addresse.de" {`<<BR>>` discard;`<<BR>>` stop;`<<BR>>`}`||Wenn die Absenderadresse "spam@adresse.de" ist, wird die Nachricht verworfen.|| | ||`:0`<<BR>>`* ^From: spam@addresse.de`<<BR>>`/dev/null`||`if header :contains "From:" "spam@addresse.de" {`<<BR>>` discard;`<<BR>>` stop;`<<BR>>`}`||Wenn die Absenderadresse `"spam@adresse.de"` ist, wird die Nachricht verworfen.|| |
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 das Webinterface des Webmailer nicht verwenden möchten, einen kleinen Einblick in die Filtersprache geben.
Inhaltsverzeichnis
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:
Speichern von Nachrichten in IMAP Ordner |
|
E-Mail Envelope Einträge untersuchen (z.B. Sender und Empfänger) |
|
Spezielle Zeichen numerisch enkodieren |
|
Speichern weitergeleiteter Nachrichten |
|
Den Body einer E-Mail untersuchen |
|
Variablen Unterstützung von Sieve nutzen |
|
Automatische E-Mail Antwort bei Abwesenheit |
|
Vacation Erweiterung zum erneuten Senden von Vacation Nachrichten nach Sekunden und nicht nach Tagen |
|
Relationale Abfragen im Sieve Skript |
|
Setzen von IMAP Flags in Nachrichten (z.B. als "gelesen" markieren) |
|
Prüfen von Einträgen im local-part der Adresse |
|
Mails mit einer Nachricht abweisen |
|
Senden von Notifications |
|
Prüfen ob IMAP Folder existieren und Anlegen neuer |
|
Auslesen von Informationen über den Sieve Interpreter |
|
Zeit- und Datums-Einträge abfragen |
|
Regular Expression support von Sieve nutzen |
|
Hinzufügen und Entfernen und Header Einträgen in Nachrichten |
|
Sieve Module / Erweiterungen auf Support und Verwendung abfragen |
|
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 |
if header :contains "Subject" "[Dovecot]" { |
Wenn sich im Betreff der Mail "[Dovecot]" befindet, wird die Nachricht in den IMAP Ordner "Dovecot" verschoben. |
:0 |
if header :contains "From:" "spam@addresse.de" { |
Wenn die Absenderadresse "spam@adresse.de" ist, wird die Nachricht verworfen. |
:0: |
if anyof (header :contains ["From", "Reply-To", "Return-Path"] "@spamaddresse.de") |
Wenn die Absender-, die Antwort- oder Weg-Adresse "@spamaddresse.de" enthält, wird die Nachricht in den IMAP Ordner "Spamverdacht" verschoben. |