Prof. Dr. Detlef Stern

Backup für Google Mail

Als Ende Februar 2011 bei ca. 150.000 Nutzern von Google Mail die dort gespeicherten E-Mails gelöscht wurden, dachte ich erst einmal "Puh, zum Glück bin ich nicht betroffen". Aber will ich das weiter hoffen? In den ersten Tagen danach war das Web voll von klugen Ratschlägen, wie man ein Backup anlegen kann. Alle diese Methoden haben einen Nachteil: sie sind für Mausschubser graphische Oberflächen optimiert und müssen manuell gestartet werden.

Nichts für mich. Ich brauche einen Mechanismus, der im Hintergrund alles für mich automatisch erledigt. Idealerweise sogar auf meinem kleinen Serverlein. So werden E-Mails auch gesichert, wenn mein Hauptrechner ausgeschaltet ist.

Es gibt einige Anleitungen, wie man mittels Fetchmail an die E-Mails bei Google herankommt. Auf Grund einiger Inkompabilitäten funktioniert das Ganze wohl auch, aber das Problem ist ein anderes: was mache ich mit den frisch gelesenen E-Mails? Fetchmail ist darauf hin optimiert, die E-Mails an einen lokalen Mail-Server weiter zu leiten. Den wollte ich nicht auch noch aufsetzen.

Gestolpert bin ich dann über einen etwas älteren Blogeintrag How to back up your Gmail on Linux in four easy steps. Die dort angesprochene Software getmail realisiert genau das, was ich brauche: die frisch gelesenen E-Mails werden als normale Textdatei(en) gespeichert und können zur Not von üblichen Mail-Programmen eingelesen werden.

Das Problem mit dem Blogeintrag: er nutzt ein Übertragungsprotokoll, dass einige Beschränkungen aufweist: POP3. Zum einen beschränkt Google die Menge an übertragenen E-Mails, nach ca. 320 E-Mails ist Schluss. Zum anderen werden damit nur die empfangenen E-Mails abgeholt, nicht die E-Mails, die ich selbst geschrieben und gesendet habe.

Google Mail erlaubt zum Glück den Zugriff via IMAP. Wie auch POP3 muss IMAP innerhalb von Google Mail aktiviert werden. Bei den Einstellungen innerhalb von Google Mail auf den Punkt "Weiterleitung und POP/IMAP" klicken und dort "IMAP aktivieren". Alles andere in der Standardeinstellung belassen.

Der geneigte Nutzer von Google Mail weiß, dass unter dem Label "Alle Nachrichten" wirklich alle E-Mails zugreifbar sind, bis auf die im Spam-Ordner. Aber wer will die schon sichern? Bei einem Zugriff via IMAP werden die Label von Google Mail zu sogenannten Ordnern. Der Posteingang heißt unter IMAP "INBOX". Den IMAP-Namen für "Alle Nachrichten" konnte ich mittels Thunderbird als "[Gmail]/Alle Nachrichten" ermitteln. Bei einer anderen als der deutschen Spracheinstellung muss der Name entsprechend angepasst werden. Erinnert mich an das frühe VBA, als selbst die Befehle eingedeutscht waren. Schrecklich. Aber nicht zu ändern.

Mit diesen Daten ist alles zum Konfigurieren von getmail beisammen. Wie Sie getmail installieren müssen, werde ich nicht erklären. Das ist zu systemspezifisch. Auf meinem Serverlein reichte ein einfacher Aufruf des Paketmanagers.

Legen Sie als erstes in Ihrem Benutzerverzeichnis "~" das Verzeichnis .getmail so an, dass nur Sie darauf zugreifen können:

mkdir -m 0700 ~/.getmail

Dann legen Sie die Konfigurationdatei an. USER ist Ihr Benutzername bei Google Mail, PASSWORD Ihr Kennwort.

cat <<EOF > ~/.getmail/getmailrc
[retriever]
type = SimpleIMAPSSLRetriever
server = imap.gmail.com
username = USER@gmail.com
password = PASSWORD
mailboxes = ("[Gmail]/Alle Nachrichten", )

[destination]
type = Maildir
path = ~/.getmail/gmail-backup/

[options]
verbose = 0
delivered_to = false
received = false
read_all = false
message_log = ~/.getmail/gmail.log
EOF

Jetzt müssen Sie nur noch das Verzeichnis gmail-backup anlegen. Dies erledigt getmail leider nicht automatisch.

mkdir -m 0700 -p ~/.getmail/gmail-backup/{cur,new,tmp}

Jetzt kommt der große Moment:

getmail -g ~/.getmail -v -v -v

Mit diesem Aufruf starten Sie getmail (der konkrete Befehl kann, je nach Installation, ein wenig variieren). Die drei Optionen -v bewirken, dass Sie die Zugriffe auf Google Mail gut nachvollziehen können. Die ganz Harten unter uns können auch --trace verwenden. Nun wird der gesamte Inhalt Ihres Google Mail Kontos heruntergeladen und im Verzeichnis ~/.getmail/gmail-backup/new in einer Datei pro E-Mail gespeichert. Das kann dauern.

Inzwischen erkläre ich den Inhalt von getmailrc. Der Abschnitt [retriever] dürfte soweit klar sein. Hier geben Sie alle Informationen, um auf Ihr Google Mail Konto zugreifen zu können. Unter mailboxes geben Sie eine Liste der zu sichernden Labels an. Im Abschnitt [destination] wird definiert, wo und in welchen Format die E-Mails abgelegt werden. Ich habe mich für das Maildir-Format entschieden, da es gegenüber dem konkurrierenden mbox-Format wesentlich robuster ist. Und darauf kommt es mir bei einem Backup an. Wer möchte, kann die E-Mails in beiden Formaten speichern. getmail kennt dazu das Konzept MultiDestination.

Einige Einträge im Abschnitt [options] sind wichtig. read_all muss auf den Wert false gesetzt werden. Sonst liest getmail bei einem zweiten Aufruf alle E-Mails erneut ein und speichert diese mehrfach. delivered_to und received besitzen ebenfalls den Wert false, damit getmail die sog. Headerinformationen nicht ergänzt / ändert. Alle Vorgänge können in der unter message_log benannten Datei nachvollzogen werden.

Sind alle E-Mails inzwischen heruntergeladen worden? Nein? Dann ist ja noch etwas Zeit einen cron-Job einzurichten. Wieder ist dies von der jeweiligen Installation abhängig. Wichtig ist aber, beim Aufruf von getmail die Option -q anzugeben. Dann teilt getmail nur im Fehlerfalle etwas mit. Ich habe mir eine Datei angelegt, die ich dann im cron-Job verwende:

cat <<EOF > ~/bin/backup-gmail.sh
#!/bin/sh
/usr/bin/getmail -q -g /home/dkr/.getmail
EOF
chmod 700 ~/bin/backup-gmail.sh

Die Datei backup-gmail.sh lasse ich periodisch einmal am Tag aufrufen:

crontab -u dkr -l
50  23  *   *   *   /home/dkr/bin/backup-gmail.sh

Pünktlich um 23:50 Uhr läuft dann auf meinem Server die (inkrementelle) Datensicherung an. Bis jetzt ohne Probleme. Wer möchte, kann die nun lokal vorhandenen E-Mails auch noch woanders hin sichern. Sicher ist sicher.

Das Backup muss nicht per cron gestartet werden. Wenn Sie kein Serverlein besitzen, kann backup-gmail.sh auch ganz normal beim Anmelden gestartet werden. Nach dem ersten Backup, der naturgemäß länger dauert, braucht getmail auf meinem System ca. 3 Minuten für das Sichern der neu hinzugekommenen E-Mails. Davon wird die meiste Zeit mit dem Erkennen der neuen E-Mails verbracht. Bei mir sind es aktuell ca. 10.000 E-Mails, deren Header-Informationen gelesen werden müssen. Verschmerzbar.

Auf einen Nachteil möchte ich hinweisen: ungelesene E-Mails werden nach einem Backup als gelesen markiert. Dies ist vom Autor von getmail so gewollt, aber auch nicht wirklich schlimm. Der Backup kann nach dem Lesen der E-Mails gestartet werden. Oder ich schaue mir die E-Mails in der Reihenfolge ihres Eingangs unter "Alle Nachrichten" an. Fertig.