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.