Serverseitige Filter sind eine feine Sache. Wer beim Buero-Schlaf keine Alptraeume durch Mails vom Chef haben will, kann dessen Nachrichten ganz einfach schon vom Server in den Papierkorb befoerdern lassen:
require ["fileinto"];
if header :contains "From" "CHEF@example.com" {
fileinto "INBOX.Trash";
stop;
}
Vielleicht ist der Chef aber so hinterhaeltig, dass er einfach die Mail-Header faelscht. Das ist protokollbedingt sogar recht einfach. Da hilft nur, die Analyse auf den Inhalt der Email auszuweiten. Dies ist in RFC 5173 zwar beschrieben, wird von Cyrus aber nicht standardmaessig angeboten. Was irgendwo auch ganz vernuenftig ist, denn Durchackern des gesamten Inhalts einer Email frisst natuerlich deutlich mehr Ressourcen als nur die Analyse der Header. Gluecklicherweise laesst sich die Option durch einfaches Konfigurieren in der /etc/imapd.conf nachruesten. Zumindest ab der von mir aus den Sourcen mit Standard-Einstellungen gebauten Version 2.4.10 war es kein Problem.
Zunaechst einmal kann es aber nicht schaden, die Moeglichkeiten des Sieve-Servers abzufragen. Dazu einfach auf Port 2000 (oder welchen auch immer Ihr dafuer konfiguriert habt) mit telnet von der Linux-Shell aus verbinden. Ein telnet localhost 2000
sollte mehrere Zeilen liefern. Darunter auch eine, die mit „SIEVE“ beginnt. Dort steht standardmaessig
"comparator-i;ascii-numeric fileinto reject vacation imapflags notify include envelope body relational regex subaddress copy"
Okay, nischt mit body drin 🙁 Also in der /etc/imapd.conf oder wo auch immer ihr den Cyrus konfiguriert habt die folgende Zeile eintragen
sieve_extensions: fileinto reject vacation imapflags notify include envelope body relational regex subaddress copy
und den imapd reloaden/neu starten. Anschliessend sollte bei dem Test mit telnet „body“ auftauchen. Wer das echt einfach zu bedienende Webmail-Interface von Squirrelmail einsetzt, wird bei den Filtern jetzt auch „body“ entdecken und kann seine Regeln wie ueblich zusammenklicken.
Wer das von mir bevorzugte Thunderbird-Addon verwendet, darf selber editieren. Dazu erstmal eine neue require-Zeile einfuegen
require ["body"];
und dann
if body :contains "Bueroschlaf" {
fileinto "INBOX.Trash";
stop;
}
Oder eben auch alles zusammen mit
if allof (header :contains "From" "CHEF@example.com", body :contains "Bueroschlaf"){
fileinto "INBOX.Trash";
stop;
}
Eine kleine Warnung zum Abschluss: Der Gebrauch dieser hier als Beispiel genannten Regeln erfolgt auf eigene Gefahr! Wenn Euch dadurch die Email vom Chef entgeht, in welcher er darauf hinweist, dass „ein kurzes Nickerchen zur Mittagszeit die Produktivitaet steigert und deshalb nicht als Bueroschlaf verspottet werden soll“, dann ist es Eure eigne selber Schuld 😉