Table des matières
, , ,

Imapsync

Imapsync est un outil réalisé par Gilles LAMIRAL très pratique et efficace pour synchroniser des serveurs IMAP.

Les utilisations sont nombreuses :

Cette page décrit brièvement son installation et utilisation dans le cadre d'une migration courier-imap vers Google Apps.
Pour plus de détails sur l'installation d'un serveur de mail, voir Serveur de Mail.

Installation

Imapsync est inclus dans le repository Debian et peut être installé par simple ajout du paquet “imapsync”.

Pour bénéficier des dernières nouveautés (comme le support de Google Apps), il faut réaliser une installation manuelle.
Un fichier INSTALL inclus dans l'archive d'Imapsync décrit la procédure d'installation, voici un exemple d'installation sur une Debian testing/squeeze (08/2009) :

# tar -zxvf imapsync-1.286.tgz
imapsync-1.286/
imapsync-1.286/bugs/
imapsync-1.286/bugs/BUG_219_windows
imapsync-1.286/bugs/BUG_IMAPClient_3.xx
imapsync-1.286/README
imapsync-1.286/lsm.imapsync
imapsync-1.286/freshmeat
imapsync-1.286/tools/
imapsync-1.286/tools/wonko_ruby_imapsync
imapsync-1.286/t/
imapsync-1.286/t/01_connect
...
# perl -v

This is perl, v5.10.0 built for x86_64-linux-gnu-thread-multi

Copyright 1987-2007, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
~/imapsync-1.286# perl -c imapsync
imapsync syntax OK
~/imapsync-1.286#
~/imapsync-1.286# make -n install
perl -c imapsync
pod2man imapsync > imapsync.1
install -D imapsync /usr/bin/imapsync
install -D imapsync.1 /usr/share/man/man1/imapsync.1
chmod 755 /usr/bin/imapsync
~/imapsync-1.286# 
~/imapsync-1.286# make install
perl -c imapsync
imapsync syntax OK
pod2man imapsync > imapsync.1
install -D imapsync /usr/bin/imapsync
install -D imapsync.1 /usr/share/man/man1/imapsync.1
chmod 755 /usr/bin/imapsync
~/imapsync-1.286#

Une fois installé, la commande imapsync est disponible :

~# imapsync -v
1.286
~#

Utilisation

Préambule : Pour éviter toute perte de données, il faut faire des essais à blanc. Il est également utile de commencer sur une petite boite aux lettres car une migration peut prendre plusieurs heures.

Utilisation simple

Imapsync réalise la synchronisation d'un compte 1 vers une compte 2. Pour chaque compte il faut définir :

Voici un exemple simple de synchronisation (les mails ne sont pas supprimés de la source) :

imapsync -host1 192.168.10.1 --user1 matthieu --passfile1 pass1 --host2 imap.gmail.com --user2 test@bouthors.fr --password2 xxxxxx --dry

L'option ”—dry” fait en sorte de ne pas réaliser réellement la synchronisation, les actions sont seulement affichées.

Exemple Google Apps / Gmail

Les fonctionnalités d'un serveur IMAP diffèrent d'un serveur à l'autre, il faut donc adapter les paramètres d'imapsync en fonction.

Pour Google Apps / Gmail, il faut ajouter :

Exemple de commande :

imapsync -host1 192.168.10.1 --user1 matthieu --passfile1 pass1 --host2 imap.gmail.com --user2 test@bouthors.fr --password2 xxxxxx --ssl2 --noauthmd5 --useheader 'Message-Id'  --skipsize --syncinternaldates --dry

Remarque : ”—noauthmd5” permet de désactiver l'authentification chiffrée md5 qui pose problème avec mon serveur courier.

Utiliser les dossiers Google Apps

Google utiliser des dossiers spécifiques pour la Corbeille, les messages envoyés et les brouillons.
Lors de la synchronisation, il est possible de réécrire les noms de répertoire pour les faire correspondre à la cible grâce à l'option ”—regextrans2”.

Voici un exemple pour les Google Apps en français :

Exemple de commande :

imapsync -host1 192.168.10.1 --user1 matthieu --passfile1 pass1 --host2 imap.gmail.com --user2 test@bouthors.fr --password2 xxxxxx --ssl2 --noauthmd5 --useheader 'Message-Id'  --skipsize --syncinternaldates --regextrans2 's/Trash/\[Gmail\]\/Corbeille/' --regextrans2 's/Sent/\[Gmail\]\/Messages envoy&AOk-s/' --regextrans2 's/Drafts/\[Gmail\]\/Brouillons/' --dry --justfolders

Remarque : l'option ”—justfolders” est très utile pour la définition des règles “regextrans” car elle permet de tester le traitement des dossiers sans s'occuper de leur contenu.

Migrer les mails

Une migration consiste à réaliser une synchronisation avec suppression.
En IMAP il faut distinguer la suppression de la purge :

Il est possible de réaliser seulement la suppression ou les deux grâce à imapsync :

Exemple de commande :

imapsync -host1 192.168.10.1 --user1 matthieu --passfile1 pass1 --host2 imap.gmail.com --user2 test@bouthors.fr --password2 xxxxxx --ssl2 --noauthmd5 --useheader 'Message-Id'  --skipsize --syncinternaldates --regextrans2 's/Trash/\[Gmail\]\/Corbeille/' --regextrans2 's/Sent/\[Gmail\]\/Messages envoy&AOk-s/' --regextrans2 's/Drafts/\[Gmail\]\/Brouillons/' --delete --expunge1 --dry 

Retour d'expérience

Lors de ma migration j'ai observé la détection de messages dupliqués. Pour la plupart cela provenait de message effectivement en double car envoyés à deux alias mails.
Il y avait cependant quelques mails marqués dupliqués car ils possédaient un “Message-ID” vide.

La meilleure méthode de migration consiste à supprimer les mails après déplacement (avec —delete) et vérifier manuellement que les mails restants sur le serveur d'origine peuvent être supprimés.

Links