Sieve ist eine Filtersprache für Mailserver — standardisiert, mächtig, und in Mailcow direkt eingebaut. Als Domain-Admin kannst Du Sieve-Filter setzen, die für alle Postfächer Deiner Domain gelten — bevor die Mail im Postfach des Users landet.
Der häufigste Anwendungsfall ist: Ich will, dass alle Mails von einem bestimmten Newsletter-Versender Domain-weit als „erwünscht” gelten und nicht im Spam landen, ohne dass jeder User das selbst einrichten muss.
Wichtig: persönliche Filter, die nur ein User für sich selbst will, gehören in seinen persönlichen Sieve im Webmail. Domain-weite Sieve-Filter sind für Regeln, die alle betreffen.
Filter anlegen
In der Mailcow-GUI:
- Konfiguration → Filter.
- Hinzufügen klicken.
Im Dialog:
| Feld | Wert |
|---|---|
| Aktiv | aktiviert |
| Filtertyp | „Vorfilter” oder „Nachfilter” |
| Domain | Deine Domain |
| Sieve-Skript | siehe unten |
| Beschreibung | sprechender Text |
Vorfilter vs. Nachfilter
- Vorfilter läuft, bevor der persönliche Filter des Users greift. Wird etwa genutzt, um Mails noch vor dem User-Filter zu verwerfen oder umzuleiten.
- Nachfilter läuft, nachdem der persönliche Filter durchgelaufen ist. Wird etwa genutzt, um Mails als letzte Sicherheits-Schicht zu sortieren, falls der User keinen eigenen Filter dazu hat.
Aus unserer Erfahrung: 90 % der Domain-weiten Filter sind Nachfilter — sie greifen nur, wenn der User selbst nichts spezifiziert hat. Vorfilter nutzt Du, wenn Du Domain-Policy durchsetzen willst.
Sieve-Sprache — die wichtigsten Patterns
Sieve ist nicht-Skriptsprache. Du beschreibst Bedingungen und Aktionen, kein Programmfluss.
Pattern 1: Newsletter-Versender in einen Ordner sortieren
require ["fileinto", "envelope"];
if anyof (
address :is "from" "newsletter@firma-x.com",
address :contains "from" "@info-newsletter.de"
) {
fileinto "Newsletter";
stop;
}
Mails von diesen Sendern landen automatisch im Ordner „Newsletter” — auf jedem Postfach Deiner Domain.
Achtung: der Ziel-Ordner muss in jedem Postfach existieren. Wenn er nicht da ist, landet die Mail im INBOX.
Pattern 2: Bestimmte Sender komplett verwerfen
require ["envelope"];
if address :is "from" "spam@bekannter-spam.com" {
discard;
stop;
}
Mails von dem genannten Sender werden ohne Weiteres verworfen, kommen in keinem Postfach an, der Sender bekommt keinen Bounce.
Vorsicht: discard ist endgültig — keine Möglichkeit, die Mail später zurückzuholen. Bei wichtigen Sendern lieber fileinto "Spam"; statt discard;.
Pattern 3: Mails mit bestimmten Schlagwörtern markieren
require ["fileinto", "imap4flags"];
if header :contains "subject" "[Rechnung]" {
fileinto "Rechnungen";
addflag "\\Flagged";
stop;
}
Mails mit „[Rechnung]” im Betreff werden in den Ordner „Rechnungen” einsortiert und mit einem Flag (Sternchen) markiert.
Pattern 4: Mails an Funktionsadressen umleiten
require ["envelope", "redirect"];
if address :is "to" "alt-info@deinverein.de" {
redirect "info@deinverein.de";
stop;
}
Mails an die alte Adresse werden an die neue weitergeleitet. Ähnlich wie ein Alias — aber bei Bedarf konditional, mit Datum-Filter oder anderen Bedingungen.
Pattern 5: Mails von außen mit bestimmten Anhängen abweisen
require ["body", "reject"];
if anyof (
body :raw :contains "0xDEADBEEF"
) {
reject "Diese Mail wurde aus Sicherheitsgründen abgelehnt.";
stop;
}
Mails mit verdächtigem Inhalt werden mit Bounce-Nachricht zurückgewiesen.
Sieve-Sprache — wichtige Direktiven
| Direktive | Was sie tut |
|---|---|
require ["..."] | Aktiviert benötigte Sieve-Erweiterungen. Steht immer ganz oben. |
if, elsif, else | Konditionale Logik. |
anyof, allof, not | Boolean-Verknüpfung mehrerer Bedingungen. |
address, header, envelope, body | Worauf wird matched. |
:is, :contains, :matches, :regex | Wie wird matched. |
fileinto "ordner" | In Unterordner verschieben. |
discard | Verwerfen. |
redirect "..." | Weiterleiten. |
reject "Begründung" | Mit Bounce abweisen. |
addflag, setflag | Mit IMAP-Flags markieren (Flagged, Seen, Answered). |
stop | Filter abbrechen, Mail nicht weiter verarbeiten. |
Komplette Referenz: RFC 5228 — aber für 95 % der Use-Cases reichen die Patterns oben.
Filter testen
Wenn Du einen neuen Filter angelegt hast:
- Aktiv zunächst auf Inaktiv lassen.
- Test-Mail senden, die der Filter erfassen sollte.
- Filter schrittweise aktivieren.
- Erneut testen.
Bei syntaktischen Fehlern lehnt Mailcow das Speichern bereits ab — Du bekommst eine Fehlermeldung mit Zeile.
Bei logischen Fehlern (Filter erfasst die falschen Mails) musst Du es selbst durchdenken — oder schreib uns ein Ticket, wir helfen.
Best Practices
Filter dokumentieren. In jedem Filter eine sprechende Beschreibung im Beschreibung-Feld. „Filter 1” sagt nichts. „Newsletter von info-newsletter.de in Ordner X” ist klar.
Vorfilter sparsam einsetzen. Vorfilter überschreiben User-Entscheidungen — User können nichts dagegen tun, ohne dass Du das änderst. Wenn ein User später eine andere Sortierung will und Dein Vorfilter dem im Weg steht, ärgert er sich. Lieber Nachfilter, die User-Filter ergänzen.
Bei Spam-Patterns Vorsicht. Spam-Versender ändern Domains und Adressen ständig. Domain-weite Spam-Filter sind oft schnell veraltet. Besser: Mailcow-eigenen Spam-Filter (Rspamd) auf Server-Ebene tunen — frag uns.
Niemals discard für unbekannte Sender. Wenn Du Sender komplett verwerfen willst, sicher sein, dass nichts Wichtiges davon dabei sein kann. Sonst lieber fileinto "Verdacht";.
Häufige Fragen
Funktionieren Domain-weite Filter auf neue Postfächer? Ja, automatisch. Sobald ein Postfach in der Domain angelegt wird, gelten alle aktiven Domain-Filter sofort.
Können User Domain-weite Filter sehen? Nein. Sie sehen nur ihre persönlichen Filter im SOGo. Wenn ein User sich wundert, warum eine Mail in einem bestimmten Ordner gelandet ist und er findet keinen passenden eigenen Filter, ist’s wahrscheinlich ein Domain-Filter.
Wie kann ich einen Filter testen, bevor ich ihn live schalte? Mailcow hat keinen eingebauten Sieve-Tester. Best Practice: Sieve im Filter-Edit speichern (mit „Inaktiv”), dann eine Test-Mail an Dein eigenes Postfach senden, die der Filter erfassen würde — und prüfen, was passiert. Schritt für Schritt.
Kann ich mehrere Filter parallel haben? Ja, beliebig viele. Sie werden in der Reihenfolge ausgeführt, die Du im Filter-Edit unter „Reihenfolge” festlegst.
Was passiert, wenn ein Filter einen Fehler hat? Mailcow loggt den Fehler im E-Mail → Mail-Logs. Die Mail wird trotzdem zugestellt — das ist das gewollte „fail open”-Verhalten, damit ein kaputter Filter nicht die ganze Domain lahmlegt.
Kann ich Sieve-Filter pro Postfach separat setzen? Domain-weit als Domain-Admin: nein. Pro-User-Filter: ja, im SOGo Webmail. Mehr in Persönliche Sieve-Filter im Webmail.
Wie debugge ich einen Filter, der nicht greift?
Im Sieve-Skript zusätzlich fileinto "Sieve-Debug"; einfügen — ein Ordner, in dem Du siehst, welche Mails den Filter durchlaufen haben. Wenn der Debug-Ordner leer bleibt, matched die Bedingung nicht.
Weiter geht’s
Erste Anmeldung als Domain-Admin in der Mailcow-GUI
Nach der Bestellung Deines Mailserver-Tarifs bekommst Du Zugang zur Mailcow-GUI. Hier ein Überblick, was Du als Domain-Admin siehst und wo Du was findest.
Postfächer anlegen, bearbeiten und Quotas setzen
So legst Du als Domain-Admin neue Mailadressen an, vergibst Speicher-Quotas, änderst Passwörter und löscht Postfächer wieder.
Aliase und Catchall einrichten
Mehrere Mailadressen auf ein Postfach umleiten — info@, kontakt@, presse@ alles in eine Mailbox. Plus Catchall für alle Tippfehler-Adressen.
App-Passwörter für Mailclients und ActiveSync erstellen
Wenn Du 2FA aktiv hast, brauchen Outlook, Apple Mail, ActiveSync ein App-Passwort statt des Haupt-Passworts. So legst Du sie an, widerrufst sie und vermeidest Passwort-Chaos.