Sieve
Sieve and SSL / TLS
timsieved allows for SSL on connect (like https, imaps, or pop3s), only STARTTLS.
So you have to wrap it in an stunnel (www.stunnel.org), which is a another story …
Have a look at this: http://lists.horde.org/archives/ingo/Week-of-Mon-20050704/000872.html
Testing
Telnet to port 2000:
telnet localhost sieve Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. "IMPLEMENTATION" "Cyrus timsieved v2.2.12" "SIEVE" "fileinto reject envelope vacation imapflags notify subaddress relational comparator-i;ascii-numeric regex" "STARTTLS" OK
Sivtest:
station7: #/usr/bin/sivtest as user cyrus: cyrus@station7:~> sivtest -t /etc/ssl/private/station7_key.pem -a haasc -u haasc -v localhost
S: „IMPLEMENTATION“ „Cyrus timsieved v2.2.12“
S: „SASL“ „LOGIN PLAIN“
S: „SIEVE“ „fileinto reject envelope vacation imapflags notify subaddress relational comparator-i;ascii-numeric regex“
S: OK
failure: STARTTLS not supported by the server!
without the keyfile ist works!
cyrus@station7:~> sivtest -t "" -a haasc -u haasc -v localhost
Redirection of email
redirect „eMailAdresse“;
Eg:
redirect "haasc@haas-online.org";
Die Anführungszeichen und das Semikolon werden mit eingegeben. Das Skript besteht dann nur aus dieser einen Zeile.
Vacation notices
Kann man eine bestimmte Zeit seine E-Mails nicht abrufen, z.B. weil man Urlaub macht, kann man eine automatische Antwort an die Absender eintreffender E-Mails schicken lassen.
Dazu erstellt man ein entprechendes Sieveskript, das die Aktion „vacation“ ausführt. Das einfachste vacation-Skript beinhaltet die zwei folgenden Komponenten: Die eigenen Adressen (beliebig viele), von denen eine im Header einer empfangenen Mail bei „To:“ oder „Cc:“ stehen muss, damit das Skript aufgerufen wird, und der Text der Benachrichtigung. Die Syntax dieses Skripts ist folgendermaßen:
require "vacation"; vacation :addresses ["Adresse1", "Adresse2"] "Text";
Eg:
require "vacation"; vacation :addresses ["haasc@haas-online.org", "christoph.haas@haas-online.org"] "I'm abroad!";
Ein bestimmter Absender erhält nur eine einzige Abwesenheitsbenachrichtigung, auch wenn er mehrere E-Mails schickt. Eine weitere Benachrichtigung erhält er erst wieder nach sieben Tagen. Will man diesen Wert ändern, so dass bis zur nächsten Benachrichtigung z.B. 14 Tage gewartet wird, so benutzt man dafür die Option „:days <Anzahl Tage>“, die vor der Option „:addresses“ eingefügt wird:
require "vacation"; vacation :days 14 :addresses ["haasc@haas-online.org", "christoph.haas@haas-online.org"] "I'm abroad!";
Es können auch komplexere Regeln erstellt werden, bei denen z.B. verschiedene Absender eintreffender Mail unterschiedliche Abwesenheitsbenachrichtigungen erhalten. Dies erreicht man durch vorheriges Filtern der eintreffenden E-Mails.
Dies ist beispielsweise sinnvoll, wenn man Mailinglisten oder Newsletter abonniert hat, damit die Abwesenheitsbenachrichtigung nicht an diese Adressenr geschickt wird. Hier ein Beispielskript, das die Mails an die Mailingliste „Bio-info“ in den Ordner „Bio-Info“ kopiert, eintreffende Newsletter von Stretta Music in die INBOX verschiebt und an alle anderen Absender eine Abwesenheitsbenachrichtigung sendet:
require ["fileinto", "vacation"];
if address :localpart :is "to" "bio-info" {
fileinto "Bio-Info";
}
elsif address :is "info@stretta.de" {
keep;
}
else {
vacation :addresses ["auerswald@uni-koeln.de", "auerswald@rrz.uni-koeln.de"] "Ich bin nicht da!";
}
Filtering of emails
Eine ausführliche Erläuterung der Sprache Sieve würde den Rahmen dieser Dokumentation sprengen, daher sei auf die offizielle Dokumentation verwiesen.
Mail-Filter enthalten im Allgemeinen eine „Wenn-Dann-Abfrage“ (if-Abfrage): Wenn ein bestimmter Bestandteil (z.B. die Empfängeradresse) der E-Mail bestimmte Wörter (z.B. die Adresse einer Mailing-Liste) enthält, dann soll mit dieser E-Mail eine bestimmte Aktion (z.B. das Verschieben in einen Ordner) durchgeführt werden.
Diese if-Abfragen haben eine bestimmte Syntax:
if <Bedingung1> { <AktionsBlock1> }
elsif <Bedingung2> { <AktionsBlock2> }
else { <AktionsBlock3> }
Es können beliebig viele elsif definiert werden, die der Reihe nach abgearbeitet werden. Werden elsif und else weggelassen, so wird, falls die if-Bedingung nicht erfüllt ist, die Standardaktion „keep“ durchgeführt, d.h. die E-Mail wird im Folder „INBOX“ abgelegt.
if-clauses
if-Bedingungen bestehen aus dem Bestandteil der Mail, der überprüft werden soll (z.B. der Adressteil oder der Header; Test-Befehl und Test-Befehl-Attribut), der Art der Überprüfung (Vergleichsoperator) und einem Muster, dem dieser Bestandteil entsprechen soll (z.B. E-Mail-Adresse, Inhalt des Subjects). Die Syntax für die Test-Befehle address und header ist:
if <test-befehl> <vergleichsoperator> "<test-befehl-attribut>" "<muster>"
Der Test-Befehl address kann noch weiter spezifiziert werden durch die Zusatzoptionen :all, :localpart und :domain. Diese Zusatzoption steht dann zwischen dem „Test-Befehl“ und dem „Vergleichsoperator“.
Ein paar Beispiele:
if address :domain :is "from" "uni-koeln.de" -> filtert auf Mails, deren Absender-E-Mail-Adresse die Domain "uni-koeln.de" hat. if header :contains "subject" "wichtig" -> filtert auf Mails, deren Subject das Wort "wichtig" enthält. if address :is ["to", "cc"] "bio-info@uni-koeln.de" -> filtert auf Mails, bei der die Empfängeradresse oder die Adresse, an die eine Kopie der Mail geht, "bio-info@uni-koeln.de" ist.
Standardmäßig wird nicht zwischen Groß- und Kleinschreibung unterschieden. Die Syntax anderer Test-Befehle unterscheidet sich von der oben angegebenen: siehe Tabelle.
Test-Befehle (Auswahl):
Test-Befehl | Test-Befehl-Attribute (String-List) | Ueberprüft folgenden Bestandteil der Mail |
---|---|---|
address | from, to, cc, bcc | Adressfelder der E-Mail, z.B. „From:“, „To:“, „Cc:“ |
header | z.B. subject, date | Irgendein Feld des Kopfteils, z.B. Betreff oder Datum |
exists | z.B. from, date | Irgendein beliebiger Bestandteil der Mail, z.B. Absender |
und Datum; kombinierbar mit not. | ||
Syntax: if [not] exists <test-befehl-attribut> | ||
Beispiel: if not exists „from“ | ||
size | - | Größe der E-Mail |
Vergleichsoperatoren: :under, :over | ||
Größe: Dezimalzahl, erlaubt: Anhängen von „K“, „M“, „G“ | ||
Syntax: if size <vergleichsoperator> <größe> | ||
Beispiel: if size :over 1M |
Vergleichsoperatoren
Vergleichsoperator | Eigenschaft |
---|---|
:is | Absolute Übereinstimmung |
:contains | Teilweise Übereinstimmung |
:matches | Benutzen von Platzhaltern (*, ?) und Regulären Ausdrücken möglich |
Aktionen
Folgende Aktionen können durchgeführt werden: keep, fileinto, discard, vacation, redirect und reject. Die Aktionen fileinto, vacation und reject erfordern einen gesonderten Aufruf, damit sie verfügbar sind. Dieser Aufruf muss in der ersten Zeile des Sieve-Skriptes stehen und hat folgende Syntax:
require ["Aktion"];
Es können mehrere Aktionen, durch Komma getrennt, zwischen den eckigen Klammern stehen, z.B.:
require ["fileinto", "vacation"];
Befehl Aktion
keep Behät die Mail, d.h. die Mail wird in den Ordner INBOX verschoben
fileinto Verschiebt die Mail in einen (bereits vorhandenen) Mailordner
Erfordert require
Syntax: fileinto „Ordner“;
discard Verwirft bzw. löscht die Mail
vacation Schickt eine Abwesenheitsbenachrichtigung
Erfordert require
redirect Leitet E-Mails an eine andere Adresse weiter
reject Schickt die Mail mitsamt einer Mitteilung an den Absender zurück
Erfordert require
Syntax: reject „Mitteilung“;
Herausfiltern von Unerwünschter Mail (Spam)
Im Folgenden wird gezeigt, wie man mit Sieve die Spam-Markierung des Rechenzentrums nutzen kann. Das RRZK bietet für die S-Mail- und Uni-Accounts zwei Spam-Markierungen zur Auswahl: der Text „[RRZK-Spamverdacht]“ im Betreff (Subject) oder die zusätzliche Zeile „X-Spam-Level“ im Briefkopf. Mehr dazu und wie man die Auswahl einstellen kann, finden Sie auf der Seite http://www.uni-koeln.de/rrzk/mail/spam/ironport.html. Hier wird die Nutzung der Markierung über X-Spam-Level„ im Briefkopf beschrieben.
Bei Spam-Verdacht wird eine zusätzliche Zeile in den Kopfteil der Mail eingefügt, nach der man mit einem geeigneten Mailclient oder der Filtersprache Sieve suchen und entsprechende Aktionen ausführen kann. Diese Zeile beginnt mit „X-Spam-Level:“ gefolgt von 10 Sternchen. Eine entsprechende Filterregel lautet dann folgendermaßen:
if header :matches "X-Spam-Level" "\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*" {
discard;
}
Die eigentliche Regel heißt: Wenn das Feld „X-Spam-Level“ im Kopfteil der Mail den Inhalt "**********" hat, soll die Mail verworfen werden. Die Backslashes (\) vor den Sternchen (*) sind dafür da, dass die Sternchen auch als solche interpretiert werden und nicht als Platzhalter für andere Zeichen.
Will man die Mail nicht verwerfen, sondern sicherheitshalber erst einmal in einen dafür vorgesehenen Ordner (z.B. in einen Ordner namens „Spam“) abspeichern, lautet das ensprechende Skript so:
require "fileinto";
if header :matches "X-Spam-Level" "\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*" {
fileinto "Spam";
}
Der Ordner namens „Spam“ muss vorher mit einem IMAP-fähigen Mailprogramm angelegt werden.
Für andere Accounts auf Basis von Spamassassin
Für andere Accounts wird das Programm „Spamassassin“ angeboten, das eintreffende Mail nach bestimmten Kriterien filtert und als Ergebnis einen sog. „Spam-Level“ definiert. Bei Spam-Verdacht werden zusätzliche Zeilen in den Kopfteil der Mail eingefügt, nach denen man mit einem geeigneten Mailclient oder der Filtersprache Sieve suchen und entsprechende Aktionen ausführen kann. Diese drei Zeilen beginnen mit „X-Spam-Status:“, „X-Spam-Level:“ und „X-Spam-Report:“. Bei „X-Spam-Level:“ wird der „Spam-Level“ mit einer Anzahl Sternchen angezeigt. Diese Zeile des Headers eignet sich am besten, um Spam herauszufiltern. Es hat sich gezeigt, dass 6 Sternchen ein sinnvoller Wert zum Herausfiltern von Spam ist. Eine entsprechende Filterregel lautet dann folgendermaßen:
if header :matches "X-Spam-Level" "\\*\\*\\*\\*\\*\\*" {
discard;
}
Die eigentliche Regel heißt: Wenn das Feld „X-Spam-Level“ im Kopfteil der Mail den Inhalt „**“ hat, soll die Mail verworfen werden. Die Backslashes (\) vor den Sternchen (*) sind dafür da, dass die Sternchen auch als solche interpretiert werden und nicht als Platzhalter für andere Zeichen.
Will man die Mail nicht verwerfen, sondern sicherheitshalber erst einmal in einen dafür vorgesehenen Ordner (z.B. in einen Ordner namens „Spam“) abspeichern, lautet das ensprechende Skript so:
require "fileinto";
if header :matches "X-Spam-Level" "\\*\\*\\*\\*\\*\\*" {
fileinto "Spam";
}
Der Ordner namens „Spam“ muss vorher mit einem IMAP-fähigen Mailprogramm angelegt werden.
Sieveshell
Der Aufruf von sieveshell auf Smail bzw. Dialog lautet folgendermaßen:
sieveshell imap.uni-koeln.de
Nach einer Passwortabfrage (das Passwort ist das des Mailaccounts) erhält man mit der Eingabe von „help“ eine Liste der zur Verfügung stehenden Optionen:
> help
Usage:
sieveshell [-u username] [-a authname] [-r realm] <server>
help - this screen
list - list scripts on server
put <filename> [<target name>]
- upload script to server
get <name> [<filename>]
- get script. if no filename display to stdout
delete <name> - delete script.
activate <name> - set a script as the active script
deactivate - deactivate all scripts
quit - quit
Um ein Sieveskript auf den Mailserver zu laden, benutzt man das Kommando „put <filename> [<target name>]“. Hierbei steht „filename“ für den Dateinamen des hochzuladenden Skriptes und „target name“ für den Namen, den das Skript auf dem Server erhalten soll. Wird der „target name“ weggelassen, so wird der „filename“ als Namen für das Skript benutzt. Hat man das Skript hochgeladen, muss man es mit dem Kommando „activate <name>“ aktivieren. “<name>„ bezeichnet hier den Namen des Skripts.
Man kann mehrere Skripte auf den Server laden, die man dann je nach Bedarf aktiviert (mit „activate <name>“) oder deaktiviert (mit „deactivate“) . Es kann immer nur ein Skript aktiv sein. Um sich die Skripte anzeigen zu lassen, die auf dem Server liegen, benutzt man das Kommando „list“. Dort wird auch angezeigt, welches das aktive Skript ist. Will man sich den Inhalt eines Skriptes anzeigen lassen, gibt man „get <name>“ ein. Um ein Skript herunterzuladen, benutzt man ebenfalls das Kommando „get“, gibt aber zusätzlich einen Dateinamen an, unter dem das Skript gespeichert werden soll.
http://www.uni-koeln.de/rrzk/mail/software/sieve/sieve.html
← zurück