Nach 30 Tagen sollten Mails aus dem Ordner ‚xyz‘ des Users ‚joe‘ automatisch gelöscht werden. Hierzu wurde auf dem Server ein Cronjob eingerichtet, der täglich ein Script aufruft, welches den Löschauftrag mit dovecot expunge ausführt:
#!/bin/bash /usr/bin/doveadm expunge -u 'joe' mailbox 'xyz' savedbefore 30d
Die Kontrolle in Thunderbird am nächsten Tag ergab, dass zwar die meisten Mails aus dem Ordner ‚xyz‘ mit einem Datum älter als 30 Tage gelöscht waren, eine Mail aus dem letzten Jahr aber noch im Ordner verblieben war. Wie konnte das sein?
Das Schlüsselwort savedbefore bezieht sich auf das Speicherdatum der Mails, welches folgendermaßen von doveadm für die Mails des betreffenden Ordners ausgegeben werden kann:
doveadm -f tab fetch -u 'joe' "uid date.saved" mailbox 'xyz'
Und in der Tat werden dabei keine Datumsangaben älter als 30 Tage angezeigt, doveadm-expunge hat hier also korrekt gearbeitet. Thunderbird zeigt nun nicht das Speicherdatum, sondern das Empfangsdatum der Mails an und dieses lässt sich folgendermaßen von doveadm ausgeben:
doveadm -f tab fetch -u 'joe' "uid date.received" mailbox 'xyz'
Bein einem Vergleich fällt hier die Mail mit der UID 9358 auf:
# doveadm -f tab fetch -u 'joe' "uid date.saved" mailbox 'xyz' uid date.saved .... .... 9358 2026-02-03 09:10:01 .... ....
# doveadm -f tab fetch -u 'joe' "uid date.received" mailbox 'xyz' uid date.received .... .... 9358 2025-05-06 16:53:23 .... ....
Empfangen wurde sie bereits im letzten Jahr, gespeichert erst am 03.02. diesen Jahres. Des Rätsels Lösung war letztendlich, dass diese Mail am 03.02. aus einem anderen Ordner in den Ordner ‚xyz‘ verschoben wurde und bei diesem Vorgang wird eine Mail erneut gespeichert!
doveadm bezieht sich mit dem Schlüsselwort savedbefore auf die letztmalige Speicherung der Mails und bei dem Trash-Ordner beispielsweise macht dies ja durchaus Sinn:
/usr/bin/doveadm expunge -u 'joe' mailbox 'Trash' savedbefore 7d
Damit werden Mails gelöscht, nachdem sie sieben Tage im Trash-Ordner verblieben sind (und nicht bereits sieben Tage, nachdem sie erstmalig empfangen wurden)