Home > Systemverwaltung > HowTo: Umzug von IMAP-Mailboxen Reloaded

HowTo: Umzug von IMAP-Mailboxen Reloaded

Man höre und staune, aber mein damaliger Artikel über den Umzug von Mailboxen bei Serverumzug hat mir doch tatsächlich einen Kunden spendiert, der mich genau dafür engagiert hat :-). Freut mich natürlich ! Vor allem, da ich den Job auch zu seiner Zufriedenheit durchgeführt habe :-).

Diesmal hatte ich aber einige Hürden zu überwinden, die mich aber zu einem wunderbaren OpenSource-Tool geführt haben, das ich hiermit vorstellen möchte:

ImapSync

Welche Hürden haben mich zu ImapSync geführt ?

  1. Der Kunde hatte eine ganze Anzahl von mehrstufig geschachtelten IMAP-Foldern in seinem Webhosting-Paket.
  2. Die Mailfolder haben die GigaBtye-Grenze teilweise deutlich überschritten
  3. Da seine Mailboxen auf dem zentralen Mailserver seines Providers lagen, war keinerlei direkter Zugriff über FTP bzw SSH möglich : Webhosting-Paket
  4. Der Zielserver war ein managed Server, auf dem keinerei Software-Installation möglich war. Es war ebenfalls nicht möglich direkt auf Filesystem-Ebene auf die Mailbox-Ordner zuzugreifen.

Also alles was ich damals beschrieben habe, ging schlicht nicht …

Was also tun ? Klare Antwort : googeln 😉 …

Und so stieß ich auf ImapSync. Eine Sammlung von Perl-Scripts, die eigentlich genau das tun sollten, was ich wollte. Auszug:

imapsync is a tool for facilitating incremental recursive IMAP transfers from one mailbox to another. It is useful for mailbox migration, and reduces the amount of data transferred by only copying messages that are not present on both servers. Read, unread, and deleted flags are preserved, and the process can be stopped and resumed. The original messages can optionally be deleted after a successful transfer.

Mir war allerdings sofort klar, dass ich diesen Job nicht über meinen heimischen PC bzw meine HomeOffice-Anbindung durchführen konnte. Die Leitung ist schlicht zu lahm … Naja ich wohne und arbeite auf dem Lande. Allerdings landschaftlich sehr schön 😉 …

Aber dafür gabs ne einfache Lösung: Betreibe ja unseren Unternehmenserver ebenfalls. Und da habe ich alle Zugänge und root-Rechte ;-).

Durchführung

Also los ! Paket impasync auf den Server  geladen und INSTAll angeschaut. Sah beherrschbar aus. Gab sogar einen Testaufruf um zu prüfen, ob alle dafür nötigen Perl-Scripts bereits auf dem Server sind. Hat man Spamassassin installiert, ist das größtenteil bereits der Fall.

Testaufruf „perl -c imapsync“ teilte mir mit, dass das Paket „Mail::IMAPClient“ fehlt. Nun das ist gerade bei Perl kein wirklicher Stress. Über

cpan -i Mail::IMAPClient

ist das Paket problemlos nachinstallierbar. Man muss nur die Defaults von cpan wählen, dann verbindet sich das Programm mit dem Internet und holt alles nötige von einem passenden Server. Nun make, gcc und dgl sollten halt auch bereits verfügbar sein. Bei einem Entwickler meist eh der Fall ;-).

Ja und danach konnten die ersten Tests starten… Aufruf ist nachvollziehbar :

imapsync –dry –host1 imap.1und1.de –user1 user1@mydomain.de –password1 mypassword1 –host2 imap.1und1.de -user2 user1@my.newdomain.de -password2 mypassword2 –authmech1 PLAIN –authmech2 PLAIN

  • –dry : nur so tun als ob = Test, was passieren würde
  • –host1 bzw –host2 : die beiden IMAP-Server (Quelle und Ziel)
  • –user1 bzw –user2 (mit –password1 und –password2) : Zugangsdaten zu den beiden IMAP-Mailboxen (Quelle und Ziel)
  • –authmech1 bzw –authmech2 : Authentifizierungsmethode

Damit lief der Test schon mal problemlos durch. Versuch ohne –dry : Fehlermeldung, dass die Verbindung zum Zielserver verloren gegangen wäre.

Erst mal blöd, aber das ImapSync-FAQ half weiter: Grund ist Timeout weil ImapSync durch die tiefe Schachtelung der Quell-Mailboxen zu lange brauchte. Vorschlag zur Lösung waren 3 neue Parameter:

–nofoldersizes –useheader Message-ID –fast

Bingo ! Damit gings ! Mit dem vollständigen Aufruf (ohne –dry)

imapsync –host1 imap.1und1.de –user1 user1@mydomain.de –password1 mypassword1 –host2 imap.1und1.de -user2 user1@my.newdomain.de -password2 mypassword2 –authmech1 PLAIN –authmech2 PLAIN –nofoldersizes –useheader Message-ID –fast

war der Umzug nun keinerlei Problem mehr. Eine vollständige Kopie einer solchen Mailbox war in ca 1/2h durch. Danach war die Zielmailbox ein exakter (!!) Spiegel der Quellmailbox. Herz was willst du mehr 🙂 !

Den Befehl kann man auch so oft absetzen, wie man will. Bei einem erneuten Aufruf werden NUR die fehlenden Mails kopiert. Geht dann innerhalb kürzester Zeit.

Absolut perfekte Lösung !!!! Kann ich jedem empfehlen, der jemals eine IMAP-Mailbox umziehen möchte !

Hier als Eindruck der Anfang der Ausgabe dieses Scripts. Vorbildlich !!


$RCSfile: imapsync,v $ $Revision: 1.310 $ $Date: 2010/02/26 01:24:59 $
Here is a [linux] system (Linux h1667756 2.6.27.29-0.1-default #1 SMP 2009-08-15 17:53:59 +0200 x86_64)
with perl 5.10.0
Mail::IMAPClient  3.23 and the module Mail::IMAPClient version used here is 3.23
Command line used:
/usr/bin/imapsync --host1 imap.1und1.de --user1 user1@mydomain.de --password1 MASKED --host2 imap.1und1.de -user2 user1@my.newdomain.de -password2 MASKED --authmech1 PLAIN --authmech2 PLAIN --nofoldersizes --useheader Message-ID --fast
Temp directory is /tmp
Turned ON syncinternaldates, will set the internal dates (arrival dates) on host2 same as host1.
TimeZone:[europe/berlin]
Will try to use PLAIN authentication on host1
Will try to use PLAIN authentication on host2
Host1 imap server [imap.1und1.de] port [143] user [user1@mydomain.de]
Host2 imap server [imap.1und1.de] port [143] user [user1@my.newdomain.de]
Banner: * OK IMAP server ready H mimap3 83558
Host imap.1und1.de says it has CAPABILITY for AUTHENTICATE PLAIN
Success login on [imap.1und1.de] with user [user1@mydomain.de] auth [PLAIN]
Banner: * OK IMAP server ready H mimap1 83558
Host imap.1und1.de says it has CAPABILITY for AUTHENTICATE PLAIN
Success login on [imap.1und1.de] with user [user1@my.newdomain.de] auth [PLAIN]
host1: state Authenticated
host2: state Authenticated
Host1 separator and prefix: [/][]
Host2 separator and prefix: [/][]
++++ Listing folders ++++
Host1 folders list:
[Entw&APw-rfe]
[Gesendete Objekte]
[INBOX]
[Papierkorb]
[Spam]

Host2 folders list:
[INBOX]

++++ Looping on each folder ++++
Host1 Folder [Entw&APw-rfe]
Host2 Folder [Entw&APw-rfe]
Host2 folder Entw&APw-rfe does not exist
Creating folder [Entw&APw-rfe]
++++ Host1 [Entw&APw-rfe] parsing headers ++++
++++ Host2 [Entw&APw-rfe] parsing headers ++++
++++ Verifying [Entw&APw-rfe] -> [Entw&APw-rfe] ++++
Time: 2 s
Host1 Folder [Gesendete Objekte]
Host2 Folder [Gesendete Objekte]
Host2 folder Gesendete Objekte does not exist
Creating folder [Gesendete Objekte]
++++ Host1 [Gesendete Objekte] parsing headers ++++
++++ Host2 [Gesendete Objekte] parsing headers ++++
++++ Verifying [Gesendete Objekte] -> [Gesendete Objekte] ++++
+ NO msg #1 [JSV/L2QGHjT4Geocqp4yGg:5152] in Gesendete Objekte
+ Copying msg #1:5152 to folder Gesendete Objekte
flags from: [Seen $cl_0][„22-Dec-2009 07:27:55 +0100“]
Copied msg id [1] to folder Gesendete Objekte msg id [1]
+ NO msg #2 [MSdin2iorkioJgarTebaoA:4925] in Gesendete Objekte
+ Copying msg #2:4925 to folder Gesendete Objekte
flags from: [Seen $cl_0][„29-Dec-2009 16:17:24 +0100“]
Copied msg id [2] to folder Gesendete Objekte msg id [2]
.

.

.

Übrigens 🙂 : Nicht durch solche Ausgaben wie „Host1 Folder [Entw&APw-rfe]“ stören lassen. Der IMAP-Folder hieß auf dem Zielsystem dann wieder „Entwürfe“ mit „ü“ 🙂 …

KategorienSystemverwaltung Tags: ,
  1. 13. Februar 2011, 04:42 | #1

    Hi,

    vlt. könntest du uns bitte sagen, wie du die 1000 mail-pws snychronisiert hast.
    auf der einen seite haben wir postfix/courier/shadow auf der anderen postfix/dovecot/mysql (beides debian lenny)

    vielen dank im voraus.

    VG
    Philip

  2. 13. Februar 2011, 12:55 | #2

    Hi Philip,

    da muss ich Dir leider sagen : gar nicht …

    Ich hatte eine Liste der Anmeldedaten (Username, Password) der Mailboxen auf dem Source-Server und eine Liste der bereits existenten noch leeren Mailboxen auf dem Zielserver (siehe Aufruf von imapsync oben).

    Es ging „lediglich“ darum die Inhalte (GBs von verschachtelten IMAP-Ordnern) zu transferieren.

    Ich wüsste für dein Problem jetzt keine technische Lösung.

    VG

    Toni

  3. 4. März 2011, 23:15 | #3

    Hi Toni,

    vielen Dank für dein kleines Tutorial… ich hatte mir schon beinahe in die Hose gemacht, als mir diese Aufgabe zuteil wurde…

    Jetzt hab ich allerdings noch die Frage ob du viele Mailboxen umgezogen hast und wenn ja, ob Du dir dafür ein Shell-Script geschrieben hast, das imapsync automatisch, eine Mailbox nach der anderen, aufruft. 🙂

    Gracias, gracias, gracias…

    • 4. März 2011, 23:24 | #4

      Hi Jan,

      freut mich sehr, wenn das Tutorial Dir geholfen hat 🙂 !!

      Antwort : Hatte mir ein einfaches Shellscript geschrieben. Musst ja für jede Mailbox die Source- und Target-Parameter angeben. Waren ca 20 Mailboxen. Aber Du brauchst ja nur die eine Zeile kopieren und die Parameter anpassen 😉

      Viele Grüße

      Toni

  4. Quu
    16. März 2011, 20:00 | #5

    Auch meinerseits vielen Dank für den hilfreichen Tutorial!

    Ich beabsichte in kürze den Anbieter zu wechseln. Bei mir ist so zeitkritisch wie manchen anderen.

    Kann ich mit imapssync ersteinmal einen Backup, offline quasi, erstellen, denn ich dann wenn der umzug vollzogen,abgeschlossen ist syncronisieren?

    vielen dank vorab für die Antwort

  5. 16. März 2011, 20:28 | #6

    @Quu
    Hi,

    nun ein Offline-Backup geht so nicht. Die Synchronisation erfolgt zwischen 2 IMAP-Mailboxen. Würde ja auch zu Mailverlusten führen. Hätte man ein Offline-Backup und würde einige Tage später dieses mit dem neuen Server synchronisieren, wären alle Mails, die nach der Erstellung des Offline-Backups eintrudeln (und auf den alten Server landen) verloren.

    Ich rate dringend (nicht nur wg Mailboxen) die beiden Server für eine sehr begrenzte Zeit parallel zu haben. Da kann man dann in Ruhe alle Applikationen umziehen und auf dem Zielserver testen. Und natürlich auch die Mailboxen synchronisieren.

    Läuft dann alles fehlerfrei, erfolgt die Domainumschaltung und ab diesem Zeitpunkt kommen alle Mails auf dem neuen Server raus. Führt man kurz davor nochmal einen Imapsync-Lauf durch, ist die Gefahr von Mailverlusten nahezu ausgeschlossen.

    Hope that helps

    Toni

  6. Michael
    18. Juli 2011, 12:24 | #7

    wirklich nett dein beitrag, nur ist jetzt imapsync kostenpflichtig geworden leider kein opensource mehr….
    schade

    Stimmt. Aber die 30€ ist es doch auch wert.

  7. moscito
    16. August 2011, 18:43 | #8

    bei mir zickt es etws aber ich steige nicht dahinter, ich bin der meinung alle daten stimmen. webmail und mailclient funktionieren ohne beanstandung.

    imapsync -dry -host1 imap.dogweb24.de -user1 web24p1 -password1 ****** -authmech1 PLAIN -host2 imap.dogweb24.eu -user2 support@dogweb24.eu -password2 ****** -authmech2 STARTTLS

    bringt folgende meldung:

    Turned ON syncinternaldates, will set the internal dates on host2 same as host1.
    TimeZone :[europe/berlin]
    Will try to use PLAIN authentication on host1
    Will try to use STARTTLS authentication on host2
    From imap server [imap.dogweb24.de] port [143] user [web24p1]
    To imap server [imap.dogweb24.eu] port [143] user [support@dogweb24.eu]
    Banner : * OK Dovecot ready.
    Host imap.dogweb24.de says it has CAPABILITY for AUTHENTICATE PLAIN
    Success login on [imap.dogweb24.de] with user [web24p1] auth [PLAIN]
    Banner : * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
    Host imap.dogweb24.eu says it has CAPABILITY for AUTHENTICATE STARTTLS
    Error login : [imap.dogweb24.eu] with user [support@dogweb24.eu] auth [STARTTLS]: 3 NO [ALERT] Unsupported authentication mechanism.

    3 NO [ALERT] Unsupported authentication mechanism.
    …propagated at /usr/bin/imapsync line 760.

    wire gesagt zielserver nutzt STARTTLS, habe ich auch in meinem thunderbird so eingestellt. empfang und versand von mails geht einwandfrei.

    ne idee was ich falsch mache?

  8. moscito
    16. August 2011, 19:57 | #9

    achja, die logs schweigen sich aus

  9. moscito
    17. August 2011, 00:04 | #11

    ich habe tls und ssl in dovecot abgeschaltet und dann mit imapsync den parameter plain genutzt, das selbe spiel. kein login machbar. im log steht authmethode nicht supportet, wie gesagt thunderbird geht und webmailer auch. aber thanks fü den tip ich werd mich mal mit er liste versuchen

    great howto

    für die squeeze nutzer hier mal der link zum tool
    http://ftp.de.debian.org/debian/pool/main/i/imapsync/imapsync_1.252-1_all.deb

    ist aus lenny, einfach die fehlenden packete nachinstallieren.

  10. Björn C.
    26. März 2012, 15:05 | #13

    HI,

    ich hab folgendes Problem…

    Ich nutze derzeit ein Webhosting-Paket und möchte auf einen dedicated Server umsteigen…

    Auf dem Server läuft bereits eine Domain, die ich zur Einrichtung des MailServers nutzen kann…

    Leider kenn ich vom alten System so gut wie keine Passwörter der Mail-User… Wie kann ich es bewerkstelligen, das die User, sollten sie noch aktiv sein, zu einem bestimmten Zeitpunkt selbst ihre Mails syncen…

    Bzw – wie schnell und gut läuft die Umstellung von Server 1 zu Server 2 – hab ich nach dem Domain-Umzug noch Zugang zu dem alten Mail-Server, das ich da noch Syncen kann???

    Danke für die Antwort…
    Gruß Björn

    • 27. März 2012, 09:37 | #14

      Hi Björn,

      ohne Passwörter kommst du leider nicht weit. Die brauchst Du unbedingt. Auch für die neu eingerichteten Mailboxen. Wenn dies Passwörter gleich sind, haben die Nutzer keinen Stress mit ihren Mailprogrammen.

      Du musst syncen bevor der Domain-Switch passiert ist. Auf dem Server hast Du ja so eine interne vom Hoster vergebene Adresse, die Du nutzen kannst.
      Bei einem Hosting-Paket hast Du das eher nicht. D.h. nach dem Domain-Switch ist der Server nicht mehr erreichbar. Jedenfalls ist es so bei den Hostern, die ich kenne.

      Viele Grüße und viel Erfolg

      Toni

  11. 24. Januar 2014, 20:22 | #15

    Yeah! Genau, was ich gesucht habe. Danke für das geile HowTo und den Hinweis auf ImapSync – hat den Umzug meines Mailservers smooth vonstatten gehe lassen.

    Vielen Dank,
    lodger

    • 24. Januar 2014, 20:54 | #16

      Na dann freut man sich doch :-)!

      Danke schön für das Feedback!

  12. 3. März 2016, 10:59 | #17

    Der Beitrag ist zwar von 2010, aber genau das was ich gesucht habe. imapsync lief bei mir ohne Probleme durch 🙂

  1. 12. Dezember 2012, 18:40 | #1