Software Berater Logo Software Berater #neuland seit 1993

Sieve anstatt procmail

procmail ist eine ziemlich alte Technologie, um Emails automatisch in Ordner zu stecken, zu verwerfen und ähnliches. Die Software ist schon so lange Bestandteil quasi aller Linux Distributionen, dass man auf die Idee kommen könnte, sie gehöre “irgendwie dazu”. Falsch. procmail ist uralt, unsicher und wird seit vielen Jahren nicht mehr gewartet. Zeit für eine Alternative. Meet sieve.

Wer sich für die Details von “procmail ist böse” interessiert, dem empfehle ich die Zusammenfassung procmail considered harmful von Antoine Beaupré. Wer als bottom line nur eine Erkenntnis mitnimmt, dem sei gesagt: Der letzte Maintainer des Codes hatte schon 2014 dazu geschrieben:

Executive summary: delete the procmail port; the code is not safe and should not be used as a basis for any further work.

#nuffsaid

Was ist (Pigeonhole) Sieve?

Die Sieve Filterregeln beschreiben, wie Email verarbeitet, einsortiert und verteilt werden soll. Sie ermöglichen das automatische Anlegen von Ordnern, das Senden von Abwesenheitsnachrichten, das Ablehnen von Emails und vieles mehr.

Die Syntax der Sieve Filterregeln wurde schon 2008 durch RFC 5228 beschrieben. Das Pigeonhole Projekt implementiert die Syntax für den Dovecot Emailserver. Dovecot ist weit verbreitet, um POP3, IMAP und andere Email-Abrufprotokolle bereitzustellen. Die Kombination “Postfix plus Dovecot” dürfte auf vielen Tausenden Servern in Betrieb sein.

Die Installation erfordert, ein Dovecot-Plugin zu installieren. Je nach verwendetem OS können dazu unterschiedliche Schritte nötig sein. Pigeonhole Installation listet die gebräuchlichen auf.

Unter Debian existiert dann bereits eine Datei /etc/dovecot/conf.d/90-sieve.conf durch die die Grundkonfiguration bereitgestellt wird.1 Die Sieve Regeln gliedern sich in systemweite Regeln und Benutzerregeln. Unter den systemweiten Regeln findet sich bei mir in /etc/dovecot/sieve-after/spam-to-folder.sieve zum Beispiel:

require ["fileinto","mailbox"];

if header :contains "X-Spam-Flag" "YES" {
  fileinto :create "Junk";
  stop;
}

Diese Regel weisst dovecot-sieve an, durch den Spamfilter per Header als Spam gekennzeichnete Emails in den Ordner Junk zu verschieben, und diesen ggfs zu erzeugen. Die weitere Bearbeitung stoppt danach.

Sieve Filter pro Benutzer

Spannend wird es, wenn ich für meinen Benutzer individuell Regeln erzeugen kann, um der Flut von Emails Herr zu werden. Dazu lege ich eine Datei ~/sieve/default.sieve an und dazu zusätzlich einen Symlink namens .dovecot.sieve.2

ln -s ./sieve/default.sieve .dovecot.sieve

In meiner Datei kann ich nun beliebig viele weitere Regeln formulieren:

require ["fileinto", "envelope"];

# Mein Sportverein
if anyof (
  # meine Adresse beim Verein
  address :is "to" "kassenwart@verein.de",
  # ein Verteiler, in dem ich bin
  envelope :is "to" "vorstand@verein.de",
  # einige Leute, die mir häufig schreiben
  address :is "from" [
    "mustermann@t-online.de",
    "jemand@web.de",
    "ein.anderer@gmail.com"
  ]
) {
  fileinto "Verein";
}

# Bank, Finanzen
if envelope :domain "From" ["postbank.de", "vrbank.de"] {
  fileinto "Finanzen";
}

# Server
if envelope :domain "From" [
    "dienstleister.de",
    "hosting.de"
  ] {
  fileinto "Server";
}

Wie erzeuge ich Sieve Regeln?

Es gibt leider wenig interaktive Tools zum Erzeugen und Aktivieren von Sieve Regeln. Der ManageSieve Dienst kann genutzt werden, um Regeln zu formulieren, ohne Dateien schreiben zu müssen. Es gibt leider nur wenige Emailprogramme oder Frontends mit Support für das ManageSieve Protokoll, darunter

Wenn diese Werkzeuge nicht funktionieren, ist das direkte Schreiben von sieve-Dateien am Server nicht die schlechteste Wahl. Tipp: Eventuelle Fehler in Skripten erzeugen Ausgaben in einer Datei .dovecot.sieve.log.

Weitere Informationen, Beispiele & Tipps

Diese Quellen haben mir geholfen:

Viel Erfolg beim Email Filtern!

  1. Tatsächlich werden alle Werte im Default verwendet und es ist zunächst fast keine Konfiguration nötig.

  2. Das ist ein Grundkonzept von Sieve: Im Ordner können beliebig viele Sieve Dateien liegen, der Name ist egal. Genau eine davon wird per Symlink unter dem Namen ~/.dovecot.sieve “aktiviert”.