Linux und Windows HelpDesk

Mailserver mit Dovecot, eMail nach X Tagen löschen.

Wenn man einen eigenen Mailserver betreibt stellt sich evtl. irgend wann die Frage, wie man Serverseitig, alte Nachrichten im Papierkorb (Trash) oder im Spam Ordner automatisch löschen lassen kann.
Man kann sich z.B. ein Script basteln, dass mit einem Cronjob ausgeführt wird und das jeweilige Postfach per IMAP aufruft, um ältere Nachrichten zu löschen.
Das ist effektiv und funktioniert, aber man hinterlegt offenkundig in einem Script die Zugangsdaten zum jeweiligen Postfach.

Verwendet man Dovecot für seinen Mailserver genügt es, eine einzige Befehlszeile als Cronjob für diese Aufgabe zu speichern.

# doveadm expunge -u spam mailbox INBOX savedbefore 30d

In diesem Beispiel werden alle Nachrichten im Posteingang des User "spam", die älter als 30 Tage sind, gelöscht.

Man kann einen Aufruf auch auf alle Mailkonten des Server anwenden.

# doveadm expunge -A mailbox Trash savedbefore 12w

Hier werden Nachrichten die älter als 12 Wochen sind, in allen Mailkonten aus dem Papierkorb entfernt.
Zum Testen verwendet man doveadm search anstelle doveadm expunge. Damit erfolgt nur eine Ausgabe auf dem Monitor, in den Mailkonten wird keine Änderung vorgenommen.

Möchte man einzelne Mailkonten definieren bietet sich wieder ein Script an, dies ist jedoch sehr übersichtlich.

#!/bin/bash
# ---------------------------------------------------------------
# Mails nach X Tagen automatisch löschen.
# Den Usernamen, den Ordner sowie die Aufbewahrungszeit angeben.
# Für die Aufbewahrungszeit z.B. 2w für 2 Wochen oder 30d für
# 30 Tage angeben. Es sind Wochen "w", Tage "d", Stunden "h",
# Minuten "m", Sekunden "s" möglich.
# ---------------------------------------------------------------
# set -x
#
USERLIST="root spam"
FOLDER=Trash
SAVETIME=4w
for user in ${USERLIST}; do
  doveadm expunge -u ${user} mailbox ${FOLDER} savedbefore ${SAVETIME}
done

Dieses Script kann man an seine Bedürfnisse anpassen, als *.sh abspeichern und per Cronjob ausführen lassen.