Vor kurzem hat mich das Mail-Archiv der Firma in den Wahnsinn getrieben – dort laufen alle möglichen Anfrage- und Statusmails ein, die dann aus rechtlichen Gründen archiviert werden. Bislang hat ein Mitarbeiter jeden Monat die ca. 40.000 Mails per Hand in einen Monatsordner verschoben. Dass Firefox keine Probleme mit diesen Mailmassen hat, finde ich zwar beeindruckend, aber die Arbeit ist dröge, nervig und dann doch irgendwie lästig.

Also habe ich nach diversen Anleitungen ein kleines Python-Skript geschrieben, dass sich per IMAP auf dem Mailserver einloggt und neue Mails automatisch aus der Inbox in einen passenden Monatsordner verschiebt. Eine kleine Anleitung dazu hier.

Konfigurationsdatei

Zunächst erstellt man dazu eine Konfigurationsdatei, z.B. mail_domain.de.ini mit folgendem Inhalt:

Hostname enthält den Namen des IMAP-Servers, username den Login-Namen und Password eben das Passwort. Das Skript unten meldet sich per TLS/SSL an. Wer das nicht will, muss hier wohl noch Hand anlegen. Für Kommentare und Feedback bin ich dankbar!

Das Skript

Das Skript imap_folder_per_month.py selbst folgt hier:

Das Skript liest den Namen der Konfigurationsdatei als Parameter von der Kommandozeile und holt sich daraus die Anmeldedaten (Zeilen 20–35). Es erfolgt ein Loginversuch (bei Fehlern wird das Skript abgebrochen).

Ab Zeile 44 holt sich das Skript die Mailboxen in der INBOX, um diese für später zu kennen (wir suchen ja dann Ordner in der Art 2017-10, 2017-11, 2017-12 usw). Die Hauptarbeit beginnt ab Zeile 54 bzw. 58: Hier werden alle Mails der INBOX gelesen. In Zeile 62 wird die Liste umgedreht, um bei der letzten Mail anzufangen (die mit der höchsten Nummer).

Die Mails werden ab Zeile 62 aufgerufen und gelesen. Sie wird zunächst per IMAP geholt, geparst und das lokale Datum der Mail herausgelesen. Mails kommen normalerweise aus diversen Zeitzonen und müssen normalisiert werden auf die lokale Zeit (alternativ könnte man hier natürlich statt local_time, einfach die UTC-Zeit verwenden). Daraus ergibt sich für jede Mail ein lokales Datum, also Jahr und Monat und damit der Ordner, in den die Mail verschoben werden soll.

Zunächst prüft das Skript, ob der Ordner bereits angelegt wurde und holt sich gegebenenfalls nach (Zeilen 76–79). In Zeilen 82 und 83 schließlich wird die Mail kopiert und aus der INBOX gelöscht. Nachdem alle Mails durchlaufen wurden, wird das Postfach tatsächlich geleert (Expunge-Befehl bei IMAP).

 

Ein Aufruf von python imap_folder_per_month.py mail_domain.de.ini sollte genügen, um das Skript zu starten. Es kann sein, dass Python-Module fehlen. Diese müssen per pip nachinstalliert werden, z.B. mit pip install imaplib – hier bitte an die entsprechenden Python-Tutorials des jeweiligen Betriebssystems halten. Hinweise, was fehlt bzw. noch benötigt wird, gibt das Skript bzw. die import-Liste am Anfang des Skripts oben.

Automatisches Verschieben der Mails mit Cron

Läuft das Ganze, kann man schließlich einen Cronjob  einrichten, um die Mailkonten regelmäßig aufzuräumen. Je nach Mailaufkommen kann man das z.B. stündlich oder sogar alle paar Minuten machen. Dazu ruft man auf dem Rechner, das das Skript regelmäßig ausführen soll (z.B. ein Server) crontab -e auf und ergänzt folgendes:

Hier wird das Skript (Pfade müssen natürlich angepasst werden) alle 15 Minuten aufgerufen.

Endlich Ruhe vor den monatlichen Monsteraktionen!