Sieve Mailfilter

Wer E-Mails nicht mehr lokal vom Client filtern lassen möchte, kann die Filter auf dem Mailserver abelegen und somit global filtern lassen, ohne die Filter der E-Mail-Clienten ständig synchronisieren lassen zu müssen. Dazu hat der FeM-Mailserver die Schnittstelle „Sieve“ über welche auf dem Mailserver vom Nutzer angelegte Filterregeln abgelegt werden können. Sieve ist in der RFC3028 spezifiziert.

Sieve Clieten

Laut Ubuntuusers ünterstützen die folgenden Clienten Sieve. Falls ihr einen anderen Clienten einsetzt und Sieve-Filter auf den Mailserver ablegen möchtet schaut ihr am besten hier nach.

Thunderbird („Sieve“ Add-on)

kMail

Squirrelmail(Webmailer)

Server-Client-Einstellungen

Servername	mail.fem.tu-ilmenau.de
Port	2000
Authentifizierung	IMAP Benutzername & Passwort
Verschlüsselung	TLS erzwingen

Sieve Syntax

Mit Sieve können alle Filtereinstellungen nachgebaut werden, welche vorher mittels GUI in diversen Webmailanwendungen oder Mailclienten angelegt wurden.

Es gibt die Aktions-Wörter

keep

Eine E-Mail wird in jedem Fall behalten (wichtig bei „redirect“).

discard

Löscht die E-Mail, ohne das sie vom Empfänger wahr genommen werden kann (Vorsicht!).

redirect

Leitet E-Mails weiter/um. Soll die Mail auch im eigenen Postfach gespeichert werden, muss nach der redirect-Anweisung ein „keep“ stehen

Syntax:

redirect <address: string>;
redirect "info@4nuts.de";

reject

Leht E-Mails ab. Require notwendig (siehe Module).

Syntax:

reject <reason: string>
reject "I'm sorry! I only accept files under 500K";

fileinto

Ist die wohl wichtigste Filtereigenschaft. Hiermit wird die E-Mail in den darüber angegbeen Ordner verschoben.

Syntax:

fileinto <folder: string>
fileinto "INBOX/FeM/Admin";

Der „folder: string“ baut sich jedoch von Mailserver zu Mailserver unterschiedlich auf. Beim FeM-Mailserver ist der Trenner im Gegensatz zu vielen andern Mailservern ein „/“. Der Posteingang heißt immer „IMBOX“. Bei der Ordnerstruktur ist auf Groß- und Kleinschreibung zu achten. Existieren Ordner nicht, werden diese von Sieve auch nicht angelegt. Die E-Mails werden dann im Posteingang abgelegt.

vacation

Mit „vacation“ können Urlaubsbenachrichtigungen eingerichtet werden. An dieser Stelle soll mangels Erfahrung auf die RFC3028 verwiesen werden.

setflag

Setzt ein IMAP-Flag an eine E-Mail. Dafür wird das Modul „imapflags“ benötigt.

Syntax:

setflag <flag>;
setflag "\\Seen";

Module

Im Sieve-Script können verschiedene Module geladen werden. Die interessantesten sind:

require "fileinto"; # zum Verschieben von Mails in Ordner der Ordnerstruktur
require "reject"; # zum Ablehnen von Mails
require "imapflags"; # um die Mail beispielsweise mit "gelesen" zu markieren
require "regex"; # für regular expressions (folgend nicht drauf eingangen)

Verknüpfungen

Um E-Mails besser filtern zu können, sollten sie nach mehreren Filter-Kriterien ausgewählt werden. Dabei kann verschieden kombiniert werden:

if header :contains "To" "nuts@fem.tu-ilmenau.de"
# matched auf alle E-Mails, die "An" nuts@fem.tu-ilmenau.de gerichtet sind
if header:contains["To","Cc"]["nuts@fem.tu-ilmenau.de","nuts@4nuts.de"]
# machted auf alle E-Mails die "An" nuts@fem.tu-ilmenau.de oder nuts@4nuts.de, oder wo einer von beiden im "CC" steht.
if allof (
header:contains "List-Id" "technik.fem.tu-ilmenau.de",
header:contains "From" "nagios@c220.fem.tu-ilmenau.de"
)
# Alle Bediungen in den () müssen erfüllt sein.
if anyof (
header:contains "From" "blaa@sextreff",
header:contains "Subject" ["Bonus","Viagra"],
header:contains "X-Spam-Flag" "Yes"
)
# Nur eine Bedinung in den () muss erfüllt sein
if allof (
header :contains "List-Id" "admin.fem.tu-ilmenau.de",
not header :contains "Subject" "Block D"
)
# Die List-Id muss admin.fem.tu-ilmenau.de enthalten und der Betreff **nicht** "Block D"

Beisiel

require "fileinto";
require "imapflags";
require "reject";
if allof (
header :contains "List-Id" "fem.tu-ilmenau.de",
size :over 500K
)
{
reject "I'm sorry! I only accept files on mainlinglists under 500K";
stop;
}
# Admin
elsif allof (
header :contains "List-Id" "admin.fem.tu-ilmenau.de",
not header :contains "Subject" "Block D"
)
{
fileinto "INBOX/FeM/Admin";
stop;
}
elsif allof (
header :contains "List-Id" "admin.fem.tu-ilmenau.de",
header :contains "Subject" "Block D"
)
{
fileinto "INBOX/FeM/Admin/Block D";
stop;
}
elsif header :contains "From" "chefadmin@fem.tu-ilmenau.de"
{
fileinto "INBOX/FeM/Admin/dhcp";
stop;
}
# Aktive
elsif allof (
header :contains "List-Id" "aktive.fem.tu-ilmenau.de",
header :contains "From" "bilder@q240.fem.tu-ilmenau.de"
)
{
setflag "\\Seen";
fileinto "INBOX/Trash";
stop;
}
elsif allof (
header :contains "List-Id" "aktive.fem.tu-ilmenau.de",
header :contains "Subject" "[Ausleihe]"
)
{
setflag "\\Seen";
fileinto "INBOX/FeM/Technik/Ausleihe";
stop;
}
elsif header :contains "List-Id" "aktive.fem.tu-ilmenau.de"
{
fileinto "INBOX/FeM/aktive";
stop;
}
# AVT
elsif allof (
header :contains "List-Id" "virus.fem.tu-ilmenau.de",
header :contains "Subject" "Verbindungsanomalien",
header :contains "From" "flow-campus"
)
{
fileinto "INBOX/FeM/avt/VA-DOS";
stop;
}
elsif allof (
header :contains "List-Id" "virus.fem.tu-ilmenau.de",
header :contains "Subject" "DFN-CERT"
)
{
fileinto "INBOX/FeM/avt/DFN";
stop;
}
elsif allof (
header :contains "List-Id" "virus.fem.tu-ilmenau.de",
header :contains "Subject" "Supportticket #"
)
{
fileinto "INBOX/FeM/avt/VTS";
stop;
}
elsif header :contains "List-Id" "virus.fem.tu-ilmenau.de"
{
fileinto "INBOX/FeM/avt";
stop;
}
# Technik
elsif allof (
header :contains "List-Id" "technik.fem.tu-ilmenau.de",
header :contains "Subject" "JIRA"
)
{
fileinto "INBOX/FeM/Technik/Jira";
stop;
}
elsif header :contains "List-Id" "technik.fem.tu-ilmenau.de"
{
fileinto "INBOX/FeM/Technik";
stop;
}