Mit der Zeit werden die Mailboxen der User immer voller und benötigen mehr und mehr Speicher auf dem Server. Besonders ärgerlich ist es, wenn veraltete E-Mails bis in alle Ewigkeit im Papierkorb der Nutzer schlummern und der „Trash” Ordner nicht regelmäßig geleert wird. Dem kann man mit der Expire-Funktion von Dovecot aber entgegenwirken:
Das „Expire” Plugin ermöglichst es, einen Zeitpunkt für jeden IMAP-Ordnertyp festzulegen, nach dem E-Mails automatisch vom Server gelöscht werden sollen. So ließe sich z.B. für den Papierkorb definieren, dass alle Nachrichten, die schon länger als 30 Tage im Papierkorb liegen, endgültig gelöscht werden. Der Nutzer kann die Nachrichten innerhalb von 30 Tagen nach dem Löschen noch aus dem Ordner ziehen, wenn er einzelne Mails doch noch benötigen sollte. Danach werden die E-Mails aber endgültig und ohne das Zutun des Nutzers aus dem Papierkorb entfernt. Das kann den Server je nach Nutzeranzahl deutlich entlasten und sollte für keinen Benutzer ein großes Problem darstellen. (Solange man die automatischen Lösungen auf dem Papierkorb oder den SPAM-Ordner beschränkt und eine vernünftige Frist setzt!)
Damit die „Expire”-Funktion funktioniert, muss bei einer MySQL-basierten Nutzerverwaltung sichergestellt werden, dass das Kommando zum Auflisten aller Nutzer korrekt ist. Es befindet sich in der /etc/dovecot/dovecot-sql.conf.ext. Wer meine Anleitung zur Installation eines Mailsystems mit Dovecot, Postfix und MySQL befolgt hat, sollte ganz unten in der Datei folgende Zeile sehen: (ggf. korrigieren!)
iterate_query = SELECT username, domain FROM users
In einem weiteren Schritt kann analysiert werden, wie viele E-Mails zum gegenwärtigen Zeitpunkt überhaupt von der Löschung betroffen wären (Hier: Nachrichten im Ordner „Trash”, die schon älter als 30 Tage sind):
doveadm search -A mailbox Trash savedbefore 30d
Die IDs der E-Mails und das dazugehörige Nutzerkonto werden aufgelistet.
Manuell lässt sich die automatische Löschung so anstoßen:
doveadm expunge -A mailbox Trash savedbefore 30d
Da eine manuelle Löschung aber unbequem ist, empfiehlt es sich, eine Automatik zu benutzen, die nun eingestellt werden soll: Die Konfiguration des „Expire” Plugins ist sehr schnell erledigt. In die Datei /etc/dovecot/dovecot.conf wird beispielsweise folgendes eingetragen:
mail_plugins = $mail_plugins expire plugin { expire = Trash expire = Trash.* }
Unter „plugin” werden die IMAP Ordner definiert, deren E-Mails vom Expire Plugin überwacht werden sollen. Ich lasse im Beispiel den Trash-Ordner überwachen, sowie alle Unterordner (Beim Maildir-Speicher wird kein „/” verwendet, sondern ein Punkt)
Das Expire Plugin löscht noch nichts selbstständig – es überwacht nur die Timestamps eingehender E-Mails, sodass das spätere Löschen effizienter und schneller abläuft. Für das automatische Löschen wird nun ein täglich startender Cronjob im Linux-System erstellt:
crontab -e
(folgendes unten einfügen:)
0 2 * * * doveadm expunge -A mailbox Trash savedbefore 30d
… und abspeichern. Täglich um 2:00 nachts wird das Löschkommando ausgeführt und alte E-Mails im Trash-Ordner werden entfernt.
Quellen:
http://wiki2.dovecot.org/Plugins/Expire
http://wiki2.dovecot.org/Tools/Doveadm/Expunge
http://wiki2.dovecot.org/Tools/Doveadm/SearchQuery