Server / HomeServer

E-Mails auf neuen Server umziehen / migrieren

Disclaimer
ich habe den Beitrag nach besten Wissen und Gewissen verfasst und übernehme keine Verantwortung für evtl. Schäden oder Verluste von E-Mails etc. Die Verwendung der hier bereitgestellten Informationen beruht auf eigene Gefahr!

Muss oder möchte man seine E-Mail Postfächer von einem auf einen anderen Server umziehen und die alten Mails übernehmen, so kann dies einfach per imapsync erledigt werden.

Ich persönlich habe irgendwann aufgegeben, einen eigenen Mailserver zu betreiben und habe mir hierfür den Service gemietet, damit ich muss um nichts kümmern muss. Jetzt war ich nur leider dazu gezwungen, meine Postfächer von einem auf einen anderen zu migrieren. Prinzipiell gesehen lässt sich das auch per Mail Client erledigen, dauert aber verdammt lange und ich habe auch nicht jedes verwendete Postfach selbst in Verwendung. Hier bietet es sich auch direkt an, imapsync auf einem Server im Rechenzetrum oder dem Home Server auszulagern. Eine Installation lokal auf dem eigenen PC/Notebook ist aber auch kein Problem. Dafür habe ich mir ein Dockerfile und docker-compose.yml file erstellt. Beides kann hier abgerufen werden.

Der Weg über imapsync in Docker setzt Docker und docker compose voraus. Beides gibts für Win, Mac sowie auch Linux. Auf eine Installation für Docker gehe ich hier nicht weiter ein, da es hierzu schon zahlreiche Anleitungen gibt und auch von Docker (Docker installieren) selbst.

imapsync installieren / einrichten

Wenn Docker installiert und gestartet ist, werden die beiden Dateien von hier benötigt. Einfach irgendwo zusammen in einem Ordner ablegen und den Pfad schon mal im CMD / Terminal öffnen.

Mit dem Befehl

docker-compose up -d –build

wird ein Image des benötigten Debian Grundsystems geladen, die benötigten Pakete für imapsync, zsh etc. installiert.

Nachdem build Prozess sollte der Docker Container im Hintergrund gestartet sein. Dies kann mit folgendem Befehl geprüft werden.

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cbeb72a63848 docker-imapsync_imapsync „tail -f /dev/null“ 4 days ago Up 2 seconds imapsync

Der Status wichtig, hier sollte irgendwas von ‚Up X seconds‚ oder ‚Up x minutes‚ etc. stehen. Wenn hier ‚Exited (x) x seconds ago‚ steht, ist ein Fehler passiert und der Container konnte nicht gestartet werden. Hier hilft ein ‚docker logs imapsync‚ Befehl um die Logs des Containers angezeigt zu bekommen.

Wenn der Container gestartet ist, kann sich per Terminal verbunden werden bzw. wir können auf den Docker Container springen.

docker exec -it imapsync zsh

Anstelle von zsh kann auch bash oder sh als shell verwendet werden. Ich persönlich präferiere hier die Z shell.

Nun kann getestet werden, ob imapsync richtig installiert wurde.

./imapsync –testslive

Postfächer vorbereiten

Ich habe (händisch) auf dem neuen Mailserver jedes Postfach welches ich synchronieren werde, neu angelegt. Hier habe ich überall das selbe einfach Passwort wie z.B. ‚target123′ festgelegt. Auf dem alten Mailserver habe ich von jedem Postfach das Passwort auf z.B. ’source123‘ geändert, um den sync Vorgang etwas einfacher zu gestalten.

Auch ist es sinnvoll, gelösche Elemente so wie SPAMs schon vom alten Server komplett zu löschen, da es sonst sehr lange dauern kann die alle zu übernehmen.

Nachdem diese Vorbereitungen abgeschlossen sind, kann gesynct werden.

Sync Vorgang starten

./imapsync –addheader –automap –delete1 –host1 MAILSERVER1 –host2 MAILSERVER2 –password1 PASSWORTSOURCE –password2 PASSWORTTARGET –user1 LOGINSOURCE –user2 LOGINTARGET

Ich habe alle Mails mit dem oben angegebenen Befehl synchronisieren lassen. Eine genaue Übersicht aller Befehle kann in der imapsync Dokumentation oder man page nachgeschaut werden.

Folgende Platzhalter müssen angepasst werden:

MAILSERVER1 -> IP oder Adresse vom alten Mailserver
MAILSERVER2 -> IP oder Adresse vom neuen Mailserver
PASSWORTSOURCE -> Login PW z.B. source123
PASSWORTTARGET -> Login PW z.B. target123
LOGINSOURCE -> Benutzername oder E-Mail für Login
LOGINTARGET -> Benutzername oder E-Mail für Login

Es ist auch noch wichtig zu erwähnen, dass der Parameter –delete1, alle erfolgreich synchronisierte Nachrichten von host1/MAILSERVER1 unwiderruflich löscht! Also aufpassen!

Der Befehl kann kann per STRG + C abgebrochen werden und später einfach wieder neugestartet werden. Auch kann der Befehl nach Erfolg alle paar Stunden wieder ausgeführt werden, um die restlichen noch eintreffenden Mails zu syncen. Ich hab den Sync 24h nach Erfolg das letze Mal noch gestartet (DNS Cache), um wirklich noch die letzten Mails zu syncen.

Der Sync dauert unterschiedlich lange, so wurden bei mir teilweise 60 Mails die Sekunde kopiert, aber auch bei sehr großen Postfächern mit 12 GB mit 60 Mails/s gestartet und dann zwischendurch runter auf 0,5 Mails/s gefallen. Ein mehrfacher Neustart brachte auch keinen Erfolg. So haben teilweise ein paar Postfächer mehrere Tage gebraucht um kopiert zu werden.

DNS Einstellungen aktualisieren (nur, wenn E-Mail Adressen gleich bleiben)

Wenn mindestens die Domain gleich bleibt, z.B. test@julsen.de sync zu test@julsen.de (julsen.de bleibt gleich), muss noch der DNS Eintrag angepasst werden. Dies ist meist in der Verwaltungsoberfläche bei dem Anbieter, wo auch die Domain gehostet wird. Es kann bis zu 24 Stunden dauern, bis überall die neuen Einträge angekommen sind und nicht mehr die alten aus dem DNS Cache gezogen werden.

Hier kann sicherlich auch mit der MX Priorisierung gearbeitet werden und nach Sync einfach der alte Mailserver dann gekillt werden, geht aber nur wenn man auch Zugriff auf den alten Server hat.

Passwörter setzen

Wichtig ist am Ende noch alle Passwörter wieder auf sichere Passwörter zu ändern!