Heute hatte ich eine Interessante Aufgabe zu bewältigen. Ein Mac OS X Server, der von 10.5 auf 10.6 aktualisiert wurde. Das ist ja soweit nichts besonderes. Auch dass der Maildienst aktiv ist, ist noch normal. Aber hier waren viele, wenn auch nicht alle mails mit ein Empfangsdatum Anfang 2020 angezeigt. Wenn der User nicht gerade Albert Einstein ist und sich relativistisch schnell bewegt, ist die Wahrscheinlichkeit für mails aus der Zukunft recht gering. Da war also was kaputt.
Jetzt muss man wissen, dass Apple in 10.6. als IMAP Server Dovecot verwendet und nicht mehr Cyrus. Während Cyrus eine eigene Datenbank hat (die durchaus kaputt gehen kann und bei der meiner Erfahrung nach der “Reparatur” Knopf in der OS X Server GUI nicht wirklich hilft), legt Dovecot die mails als Textdateien ins Dateisystem. Dazu zur Steigerung der Performance einen Index und einen Cache dazu. Der Vorteil von Dovecot liegt darin, dass es sich selbst repariert, wenn etwas nicht stimmt. Im Falle eines falschen Maildatums reicht das Löschen der dovecot.index.cache Datei und schon repariert Dovecot das Problem: Es nimmt das Änderungsdatum der Datei im Dateisystem und aktualisiert den Index, worauf das Mailprogramm (nach einem “Wiederherstellen” Befehl) das korrekte Datum anzeigt.
So hatte ich recht schnell das Problem beseitigt – leider nicht ganz. Denn eine ganze Reihe Mails hatten ein Änderungsdatum im Jahr 2020. Da war also offensichtlich noch mehr durcheinander. Die automatische Selbstreparatur konnte nicht funktionieren, wenn das Änderungsdatum falsch ist. In den betreffenden Dateien waren allerdings die Mailheader noch richtig enthalten, d.h. z.B. ein
Date: Wed, 03 Aug 2010 22:18:22 +0200
Also habe ich ein Skript geschrieben, das alle Dateien mit einem Datum in der Zukunft findet, es nach einem funktionierenden Date:-Header durchsucht und dessen Wert als Änderungsdatum der Mail setzt. Das allerdings gestaltete sich schwieriger als zuerst gedacht. Meine Erkenntnisse daraus sind:
- Leerzeichen, Kommas, Semikolons und Doppelpunkte in Datei- und Ordnernamen sind richtig blöd, wenn man Shell-Skriptet
- Es ist sehr wichtig, an den richtigen Stellen die richtigen “, ‘ oder ´ zu setzen
Date: Header haben verschiedene Formate:
- mal mit Tagesangabe (Wed,), mal ohne,
- mal den Tag mit Punkt (03.), mal ohne (03),
- mal als einstelliges Datum (3), mal zweistellig (03),
- mal die Uhrzeit mit Doppelpunkt getrennt (22:18:22), mal mit Punkt (22.18.22)
Selbstverständlich in allen möglichen Kombinationen und zum Teil mehrfach vorkommend, teils auch im Mail-Body als Zitat …
Und das bei vielen Usern mit vielen Postfächern mit vielen Mails …. Da kam mir mehrfach der Gedanke ans Aufgeben oder Verzweifeln, aber ich habe mich dann nur zum Haare raufen hinreissen lassen und durchgebissen. Am Ende hat es dann geklappt und fast alle mails waren repariert. Spotlight sei dank sind evtl. in der Zukunft verbliebene mails leicht zu finden und dann manuell zu behandeln. Alle, die ich bisher noch in der Zukunft gefunden habe, hatten auch den Date: Header in der Zukunft. Hier vermute ich einen falsch eingestellten Mail client beim Absender.
Jedenfalls hat sich mal wieder bewahrheitet, dass Automatisierung eine tolle Sache ist.




