Wer einen eigenen MailCow-Mailserver betreibt, kennt das Problem: Im Papierkorb und im Junk-Ordner sammeln sich über Monate und Jahre tausende E-Mails an. Die User löschen nicht selber die Mails aus dem Spam-Ordner und leeren nie den Papierkorb, mit Ergebnis, dass die Mailordner riesig groß werden. Eine Einstellung in der Benutzeroberfläche gibt es leider nicht. Die Lösung: Ein automatischer Job über Ofelia – den in MailCow integrierten Scheduler.
Das Problem
MailCow bietet in der Admin-Oberfläche keine Möglichkeit, Mails im Papierkorb oder Junk nach X Tagen automatisch zu löschen. Wer doveadm expunge mit dem Parameter savedbefore versucht, stellt fest: Es passiert nichts. Der Grund ist, dass savedbefore nur Mails mit gesetztem \Deleted-Flag berücksichtigt – normale Mails im Trash-Ordner haben dieses Flag aber nicht. Der korrekte Parameter lautet stattdessen before.
Die Lösung: Ofelia-Job via docker-compose.override.yml
Erstelle im MailCow-Wurzelverzeichnis (z. B. /opt/mailcow-dockerized/) die Datei docker-compose.override.yml mit folgendem Inhalt:
services:
dovecot-mailcow:
labels:
ofelia.enabled: "true"
ofelia.job-exec.trash-expunge.schedule: "0 4 * * *"
ofelia.job-exec.trash-expunge.command: "doveadm expunge -A mailbox Trash before 30d"
ofelia.job-exec.junk-expunge.schedule: "0 4 * * *"
ofelia.job-exec.junk-expunge.command: "doveadm expunge -A mailbox Junk before 20d"
Danach MailCow neu starten:
docker compose down && docker compose up -d
Was passiert genau?
- Täglich um 4:00 Uhr werden die Jobs automatisch ausgeführt.
- Papierkorb (Trash): Alle Mails älter als 30 Tage werden endgültig gelöscht.
- Junk: Alle Mails älter als 20 Tage werden endgültig gelöscht.
- -A: Gilt für alle Benutzer auf dem Server.
- before: Filtert nach Empfangsdatum – unabhängig vom Gelöscht-Flag.
Vorab testen
Vor dem ersten automatischen Lauf empfiehlt sich ein manueller Test. Zuerst nur anzeigen, was gelöscht werden würde:
docker compose exec dovecot-mailcow doveadm search -A mailbox Trash before 30d
Wenn die Ausgabe plausibel aussieht, direkt löschen:
docker compose exec dovecot-mailcow doveadm expunge -A mailbox Trash before 30d
Logs prüfen
Ob die Ofelia-Jobs korrekt ausgeführt werden, lässt sich einfach prüfen:
docker compose logs ofelia-mailcow
Damit läuft die automatische E-Mail-Bereinigung vollständig im Hintergrund – ohne manuelle Eingriffe und ohne Änderungen an der MailCow-Kerndatei.