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
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: