Mail-Migration über IMAP mit IMAPSYNC

Abstract

Hin und wieder kommen auch Mailserver in die Jahre, oder man möchte auf andere IMAP-Server-Software umsteigen. Das Programm Imapsync kann bei der Übertragung vorhandener Mails auf einen neuen IMAP-Server gute Dienste leisten.

Hin und wieder kommen auch Mailserver in die Jahre, oder man möchte auf andere IMAP-Server-Software umsteigen. Das Programm Imapsync kann bei der Übertragung vorhandener Mails auf einen neuen IMAP-Server gute Dienste leisten.

Note

Vorab: Es gibt auch noch andere sehr gute Werkzeuge für einen Mailumzug; der Vorteil von Imapsync liegt hauptsächlich darin, dass es eben eine reine Übertragung mit IMAP ist, einem fest definierten Standard. Man muss sich also nicht allzuviel um andere evtl. existierende Besonderheiten der beteiligten Mailserver kümmern – auch ein Wechsel des Namespace oder des Mailbox-Formats ist meist unproblematisch. Trotzdem kann Imapsync designbedingt evtl. nicht alle Umzugsarbeit übernehmen, z.B. Sieve-Filter-Daten werden nicht mit übernommen, zu Problemen kann es auch mit Public-IMAP-Ordnern oder anderen IMAP-Freigaben kommen. In solchen Fällen muss man unter Umständen noch zu weiteren Werkzeugen wie rsync o.ä. greifen.

Eine Migration von einem Dovecot 1.0x zu einem Dovecot 2.0.x kann z.B. so aussehen.

Im nachfolgenden Skript imapsyncmigrator.sh wird eine kommaseparierte, zweispaltige Datei eingelesen, deren Name als erster Wert beim Aufruf des Skriptes übergeben wird. Die Werte in den Spalten (user, password) werden internen Variablen zugewiesen, und das Programm imapsync nacheinander mit den Zugriffsdaten des Mailbox-Besitzers aufgerufen:

#!/bin/bash
FILE="$1"
for i in `cat $FILE`
do
USER=`echo "$i" | awk 'BEGIN { FS="," } { print $1 }'`
PASS=`echo "$i" | awk 'BEGIN { FS="," } { print $2 }'`
imapsync --authmech1 PLAIN --authmech2 PLAIN --sep2 / --prefix2 "" --host1 1.2.3.4  --user1 $USER --password1 $PASS --host2 4.5.6.7 --user2 $USER --password2 $PASS --subscribe -delete2 --expunge2
echo "$USER done" >> imapsync.lst.log
done

Die Datei mit User und Passwort sieht so aus:

user1@test1.de,user1_pass
user2@test1.de,user2_pass
user1@test2.de,user1-pass
user2@test2.de,user2-pass

Vorher müssen die Accounts natürlich auf dem Ziel-IMAP-Server z.B in LDAP oder SQL angelegt werden.

Das Script schreibt eine kleine Logdatei imapsync.lst.log und wird hier z.B. auf dem Zielserver aufgerufen.

Man kann es mehrfach laufen lassen, wobei der erste Sync logischerweise am längsten dauert. Beim zweiten Lauf wird dann nur noch das Delta – Änderungen, die zwischenzeitlich auf dem Quell IMAP-Server geschehen sein könnten – auf den Zielserver übertragen. Es würden auch E-Mails gelöscht, die auf der Quelle zwischenzeitlich nicht mehr vorhanden sind. Außerdem werden auch die Abonnierungen von IMAP-Ordnern auf den Zielserver übertragen.

Important

Es sollte sich von selbst verstehen, dass man solche Migrationen zuerst an einem unwichtigen Testaccount einzeln testet, bevor man eine automatisierte Variante für viele reale Accounts aktiviert. Es ist z.B. nicht ungewöhnlich, dass der Quellserver einen anderen Standard-IMAP-Namespace, Prefix und/oder Separator benutzt; in diesem Fall wären die Parameter von Imapsync dann noch anzupassen.

Robert Schetterer, 26. April 2013