IMAP-Server umziehen

Ich mußte meinen alten – wirklich alten – Redhat 7.3 Linux-Server endlich auf FreeBSD umziehen und die kniffligste Sache dabei war der Umzug meines Mailarchivs von einem uw-imap Server auf Cyrus. Da mein Mailarchiv aus Mails von 10 Jahren mit insgesamt 331 Ordnern, 3,6 GB Volumen und Mails im Millionenbereich besteht (hört sich übertrieben an, aber ich bin auf so vielen Mailinglisten eingeschrieben, daß ich darüber alleine pro Tag eine dreistellige Zahl von Mails bekomme), war also durch einfaches verschieben der Mails vom einen auf den anderen Mailserver im Mailprogramm nicht zu denken. Ich habe dann verschiedene Mailtransferprogramme ausprobiert und das einzige, was halbwegs mein Problem erledigen konnte, war imapsync.

Nach einigem Herumbasteln hat dann folgender Aufruf funktioniert (leider nur teilweise, siehe dazu unten mehr):

imapsync –host1 hostname-quelle –user1 username-quelle –password1 xxxxxxx –split1 10 –nofastio1 –subscribe –subscribed –host2 hostname-ziel –user2 username-ziel –password2 yyyyyyyy –authmech2 LOGIN –authmech1 LOGIN –justfolders –regextrans2 's/^INBOX//home/username-quelle/imap/(.*)/INBOX/$1/'

Leider wurden damit doch nicht alle Mails übernommen, da scheinbar sehr viele meiner Ordner nicht mehr exakt dem mbox-Format entsprachen. Weder der uw-imapd noch Mozilla haben sich je daran gestört, aber imapsync brach jedenfalls bei vielen Ordnern ab und kopierte die Mails dieser Ordner nur unvollständig. Auch hier war ein bischen Such- und Bastelarbeit erforderlich. Letztendlich gelöst habe ich das Problem mit formail:

formail -ds < defekte_mbox-Datei > neue_mbox-Datei

Bzw. ich habe dann ein Script durchlaufen lassen:

#!/bin/bash
mboxlist=`find imap -type f -print`
for i in $mboxlist; do    
   echo "i=${i}"    
   neu="$i.neu"    
   texttest=`/usr/bin/file "${i}" | grep text | grep -v script`    
   if [ "x$testtext" == "x" ]; then
      formail -ds < ${i} > $neu
      unterschied=`diff -u ${i} $neu`
      echo $unterschied
      if [ "x$unterschied" == "x" ]; then
         echo "Kein Unterschied"
         rm -f $neu
      else
         echo "Doch ein Unterschied!"
         rm -f ${i}
         mv $neu ${i}
      fi
   fi
done

Ein Kommentar

  1. P.S.: Leider kommt imapsync auch nach dem Reparieren der mbox-Dateien nicht zum Ende. Es scheint sich jetzt aber um ein Perlproblem mit dem Speicher zu handeln. Imapsync bricht jetzt mit folgender Fehlermeldung ab:

    Out of memory during „large“ request for 8392704 bytes, total sbrk() is 534630400 bytes at /usr/local/lib/perl5/site_perl/5.8.8/Mail/IMAPClient.pm line 1386.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.