E-Mails auf Uberspace bewegen

Gestern erschien im Twitter-Feed der Ubernauten ein Link auf den Artikel „Alle E-Mail-Adressen auf Uberspace umziehen„, in dem beschrieben wird, wie man Mailadressen eines nicht bei Uberspace gehosteten Mailkontos per POP-Abruf in regelmäßigen Abständen automatisiert auf ein bei Uberspace gehostetes Mailkonto transferieren kann.

Meiner Meinung nach hat das wenig mit dem Titel des Beitrags – „E-Mail-Adressen […] umziehen“ – zu tun, weshalb ich hier eine Anleitung aufzeigen will, mit der man alle E-Mails in allen Ordnern und Unterordnern vom nicht bei Uberspace gehosteten Mailkonto in ein bei Uberspace gehostetes Mailkonto bewegen kann. Mit dieser Methode bleibt die gesamte Ordnerstruktur des alten Mailkontos im neuen erhalten.

Von IMAP-Server nach IMAP-Server

So sieht der dazu notwendige Befehl aus:

imapsync \
--host1 server1.example.com \
--user1 name@example.com \
--passfile1 secret1 \
--host2 server2.example.com \
--user2 name@example.com \
--passfile2 secret2 

imapsync wird mit folgenden Parametern aufgerufen:

  • Als --host1 definieren wir den IMAP-Mailserver der Quelle. Mit --user1 den Login an eben diesem Server. Im --passfile1 ist das Passwort zum Quell-Mailserver definiert.
  • Als --host2 definieren wir den IMAP-Mailserver, auf den die Mails und Mailordner synchronisiert werden sollen. --user2 und --passfile2 gleich wie --user1 und --passfile1.

Die Passwörter für den Quell- und den Zielserver sollten in einer Datei abgespeichert werden, damit die Passwörter nicht in diversen Logs aufscheinen.

imapsync kann jederzeit abgebrochen und zu einem späteren Zeitpunkt fortgesetzt werden, da es ohnehin inkrementell arbeitet und damit bereits transferierte E-Mails nicht nocheinmal synchronisiert.

Von Gmail nach IMAP-Server

Analog zum obigen Beispiel gibt es eine etwas ausführlicher mit Optionen ausgestattete Befehlszeile für diejenigen, die Gmail noch als Mailhost nutzen und endlich selbst hosten wollen.

imapsync \
--host1 imap.gmail.com \
--user1 name@example.com \
--password1 secret1 \
--host2 server2.example.com
--user2 name@example.com \
--password2 secret2 \
--ssl1 \
--exitwhenover 2500000000 \
--useheader="X-Gmail-Received" \
--useheader "Message-Id" \
--skipcrossduplicates \
--folderfirst "Folder1" \
--folderfirst "Folder2" \
--folderlast "Folder3" \
--folderlast "[Gmail]/All Mail"

Zusätzlich zu den Standardparametern (–host1, –user1, –password1, etc.) benötigt ein Gmail nach IMAP-Transfer noch folgende Zusätze:

  • Gmail akzeptiert ausschließlich SSL-Verbindungen, daher: --ssl1. (Die Verbindung zum Zielserver per SSL würde man mit --ssl2 herstellen.)
  • Gmail schützt sich vor massenhaften Traffic durch Limitierung des Durchsatzes, daher das Limit von 2,5 GB mittels --exitwhenover 2500000000.
  • Um Duplikate erkennen zu können, benutzen wir den „X-Gmail-Received“-Header und „Message-ID“ nur als Fallback.
  • Da Gmail nicht mit Ordnern, sondern mit Labels arbeitet und E-Mails dadurch öfter als einmal transferiert werden könnten, verhindern wir das mittels --skipcrossduplicates.
  • Mit --folderfirst kann definiert werden, in welcher Reihenfolge die Ordner gelesen werden sollen. Vor allem in Kombination mit dem Parameter --skipcrossduplicates, der Duplikate erkennt (und nicht nochmal lädt!), kann es notwendig sein, bestimmte Ordner der alphabetischen Standardreihung vorzuziehen.
  • --folderlast synchronisiert nur Nachrichten, die nur das angegebene Label haben (und kein anderes).
  • Der finale Zusatz --folderlast "[Gmail]/All Mail" spielt mit der Option --skipcrossduplicates eine entscheidende Rolle, denn damit werden nur noch Mails ins „All Mail“-Archiv geladen, die in nicht sonstwo in einem Ordner vorhanden sind!

Das war’s! Viel Spaß mit selbstgehosteten E-Mails!