Imapsync

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

Les utilisations sont nombreuses :

  • migration d'un serveur IMAP
  • backup IMAP
  • consolidation de plusieurs comptes IMAP sur un seul compte

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
...
  • Installer perl si besoin, pour vérifier qu'il est bien installé :
# 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.
  • Ajouter les paquets Debian :
    • libmail-imapclient-perl
    • libterm-readkey-perl
    • libdate-manip-perl
    • libdigest-md5-perl
  • Vérifier que imapsync est prêt à être installé par la commande “perl -c imapsync”
~/imapsync-1.286# perl -c imapsync
imapsync syntax OK
~/imapsync-1.286#
  • Visualiser ce qui va être installé avec “make -n install”
~/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# 
  • Installer imapsync avec “make install”
~/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 :

  • le serveur avec l'option ”—host”
  • le nom d'utilisateur avec l'option ”—user”
  • le mot de passe soit sur la ligne de commande avec ”—password”, soit à partir d'un fichier avec ”—passfile”

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 :

  • ”—ssl2” : activation du IMAPS côté google
  • ”—useheader 'Message-Id' —skipsize” : par défaut imapsync compare les mails par leur taille et leur header pour les identifier. Comme google modifie l'en-tête des messages, il faut ajouter ces options pour utiliser le header “Message-Id” comme identifiant
  • ”—syncinternaldates” : pour s'assurer de la synchronisation des dates et heures

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 :

  • Trash ⇒ [Gmail]/Corbeille : ”—regextrans2 's/Trash/\[Gmail\]\/Corbeille/'”
  • Sent ⇒ [Gmail]/Messages envoyés : ”—regextrans2 's/Sent/\[Gmail\]\/Messages envoy&AOk-s/'”
  • Drafts ⇒ [Gmail]/Brouillons : ”—regextrans2 's/Drafts/\[Gmail\]\/Brouillons/'”

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 :

  • la suppression ne fait que marquer un message comme supprimé
  • la purge supprime définitivement les messages

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

  • la suppression sur le serveur source est réalisée avec ”—delete”
  • la purge des messages marqués “supprimé” sur le serveur source est réalisée avec la commande ”—expunge1”

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

linux/imapsync.txt · Dernière modification: 2011/01/08 12:40 par matthieu
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki