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:
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.
Schlagworte: Gmail, backup, getmail, google, mail.