Postfix/Courier: Automatisches Löschen von alten E-Mails

Administratoren und Privatanwender, die einen eigenen E-Mail-Server basierend auf Postfix betreiben, werden auf längere Zeit das Problem haben, dass Unmengen an E-Mails in den Mailboxen bzw. Postfächern anfallen. Der Grund dafür ist, dass standardmäßig ältere E-Mails nicht gelöscht werden, wie man es beispielsweise von großen E-Mail-Anbietern wie GMX gewohnt ist. Diese Anbieter löschen automatisch E-Mails, wenn diese bsp. älter als drei Monate sind, um das Datenaufkommen zu minimieren.

Verstärkt wird dieses Problem, wenn man anstatt POP3 das IMAP-Protokoll verwendet, da in diesem Fall die E-Mails durch den Mail-Client (bsp. Outlook oder Thunderbird) nicht vom Postfix-Server abgeholt werden, sondern der E-Mail-Client das Postfach synchronisiert. In diesem Fall bleiben die E-Mails weiterhin auf dem Server bestehen.

In diesem Artikel wird gezeigt, wie man E-Mails in den Postfächern des Postfix-Mailserver automatisch gelöscht werden, wenn diese älter als eine bestimmte Zeit sind. Wichtig hierbei ist das Verständnis, dass Postfix ein so genannter MTA ist und somit nur für die Zustellung und den Transport von E-Mails ist. D.h. man wird in der Postfix-Konfiguration keine Einstellung finden, die auf ein automatisches Löschen von E-Mails hindeutet.

Alternativ könnte man nun in den Einstellungen des POP3- bzw. IMAP-Dämons (bsp. Courier) schauen, aber das automatische Löschen lässt sich mit einfachen Linux-Boardmitteln realisieren. Da Postfix die E-Mails als einfache Textdateien auf dem Dateisystem unter /var/mail/ abspeichert, löschen wir einfach die alten E-Mails. Alte E-Mails erkennen wir an ihrem mtime-Stempel, sprich die modification time (zu Deutsch Änderungsdatum).

In folgendem Beispiel befinden sich die E-Mails im Verzeichnis cur unter /var/mail/domains/abc/max.mustermann\@pc-erfahrung.de/

# ls /var/mail/domains/abc/max.mustermann\@pc-erfahrung.de/cur/
1315925632.V902I1ad129M869466.localhost:2,S
1315929489.V902I1c8666M321862.localhost:2,S
1315949592.V902Icb24cM949565.localhost:2,S
1316071322.V902Iaf385M389866.localhost:2,
1316088872.V902Icb242M613748.localhost:2,S
1316089961.V902If7671M26100.localhost:2,S

Bei jeder dieser Datei mit dem kryptischen Namen handelt es sich um eine vollständige E-Mail, welche man mit einem Editor öffnen kann. Nun ist es Aufgabe, die alten E-Mails anhand ihrer mtime ausfindig zu machen. Dazu schauen wir uns den Befehl find an. Die Syntax lautet wie folgt:

find /VERZEICHNIS OPTIONEN -exec TU-WAS {} \;

Für das Änderungsdatum bietet find gleich den passenden Parameter mit. Hier der Befehl, welcher alle E-Mails löscht, welche älter als 90 Tage sind:

find /var/mail/domains/abc/max.mustermann\@pc-erfahrung.de/cur/ -type f -mtime +90 -exec rm {} \;

Hier die Erläuterung des Befehls:

  • -type f: Typ = file, finde nur Dateien, keine Verzeichnisse
  • -mtime +90: Änderungsdatum 90 Tage und älter (+ bedeutet älter als, - bedeutet neuer als, kein Vorzeichen bedeutet exakt zu diesem Tag)
  • -exec rm {}: Führe für jede gefundene Datei den Befehl rm aus

Nun kann man mittels cronjob den Befehl automatisch und regelmäßig ausführen, so dass die Postfächer regelmäßig von alten E-Mails befreit werden.