Migrer ses emails facilement avec imapsync

Si la migration de sites web ne pose généralement pas de problème, il est parfois plus délicat de migrer des emails, notamment lorsque deux serveurs n'utilisent pas le même software ou lorsqu'il s'agit d'une migration depuis/vers un hébergeur tiers. Heureusement pour simplifier cette étape, il existe de nombreux outils, dont imapsync qui est celui dont nous allons parler aujourd'hui.

imapsync est comme son nom l'indique un outil (développé en perl) qui permet de synchroniser des boîtes mail en utilisant le protocol imap. Cela ne fonctionnera bien sûr que si vous utilisez également l'IMAP pour récupérer vos emails, ou si vous n'effacez pas vos emails du serveur avec le protocol POP.

Nous allons voir dans ce tutoriel comment installer Imapsync (sur Ubuntu 16.04 LTS), puis comment synchroniser deux boîtes mails ainsi que les options proposées par cet outil.

Installer imapsync

Tout d'abord, il faut installer les pré-requis nécessaires à l'éxecution d'imapsync :

  sudo apt-get install \
libauthen-ntlm-perl    \
libclass-load-perl     \
libcrypt-ssleay-perl   \
libdata-uniqid-perl    \
libdigest-hmac-perl    \
libdist-checkconflicts-perl \
libfile-copy-recursive-perl \
libio-compress-perl     \
libio-socket-inet6-perl \
libio-socket-ssl-perl   \
libio-tee-perl          \
libmail-imapclient-perl \
libmodule-scandeps-perl \
libnet-ssleay-perl      \
libpar-packer-perl      \
libreadonly-perl        \
libregexp-common-perl   \
libsys-meminfo-perl     \
libterm-readkey-perl    \
libtest-fatal-perl      \
libtest-mock-guard-perl \
libtest-pod-perl        \
libtest-requires-perl   \
libtest-simple-perl     \
libunicode-string-perl  \
liburi-perl             \
libtest-nowarnings-perl \
libtest-deep-perl       \
libtest-warn-perl       \
make                    \
cpanminus

Il peut être nécessaire de mettre à jour le client IMAP et JSON avec cpanm :

sudo cpanm Mail::IMAPClient
sudo cpanm JSON::WebToken

On peut ensuite télécharger imapsync :

sudo wget https://imapsync.lamiral.info/dist/imapsync -O /usr/bin/imapsync

Et il ne reste plus qu'à le rendre éxecutable :

sudo chmod +x /usr/bin/imapsync

Vous pouvez ensuite obtenir la liste des variables disponibles en utilisant la commande imapsync

Synchroniser une boîte mail

Pour lancer la synchronisation d'une boite mail avec imapsync avec uniquement les options requises ressemble à :

  imapsync \
     --host1 serveur1.imap.tld \
	 --user1 boite@email.tld \
	 --password1 motdepasse1 \
	 --host2 serveur2.imap.tld \
	 --user2 boite@email.tld \
	 --password2 motdepasse2 

Les options

Les mots de passes

Pour éviter d'avoir à entrer les mots de passe des boîte email en clair, vous pouvez les stockers dans des fichiers et utiliser l'argument --passfile1 et --passfile2 pour les charger automatiquement depuis les fichiers contenant les mots de passe.

Ce qui donne :

  imapsync \
     --host1 serveur1.imap.tld \
	 --user1 boite@email.tld \
	 --passfile2 /home/user/pass1 \
	 --host2 serveur2.imap.tld \
	 --user2 boite@email.tld \
	 --passfile2 /home/user/pass2 

La connexion au serveur imap

Plusieurs options sont disponibles pour connecter imapsync à votre serveur mail, notamment le type de connexion utilisée. Par défaut imapsync essaira d'utiliser SSL ou TLS sur le port 993 pour se connecter. Voici des exemples pour la connexion sur le serveur à migrer (remplacer 1 par 2 pour le deuxième serveur) :

  • --nossl1 pour une connexion non chiffrée via le port 143 (non recommandé)
  • --ssl1 pour une connexion avec SSL via le port 993
  • --tls1 pour une connexion avec TLS via le port 143

Il y a également des options pour définir le type d'authentification que l'on peut définir via les arguments --authmech1 et --authmech2 dont les valeurs possibles sont (en majusule) :

  • PLAIN
  • LOGIN
  • CRAM-MD5

Les dossiers

La synchronisation des dossiers peut être une source de problèmes, notamment si les dossiers par défaut (Inbox, Spam, Archive, Envoyés) ne sont pas nommés de la même façon sur les deux serveurs mails.
Pour cela imapsync offre plusieurs options :

  • --automap pour utiliser la reconnaissance automatique des dossiers par défaut
  • --nomixfolders pour éviter de fusionner des dossier ayant un nom similaire selon la sensibilité à la casse
  • --prefix1 pour retirer un prefix des dossiers à migrer
  • --prefix2 pour ajouter un prefix aux dossiers migrés
  • --skipemptyfolders pour ne pas recréer les dossiers vides sur le serveur de destination

Les options de migration

Pour accélerer la migration des emails, vous pouvez utiliser l'argument --usecache afin de stocker temporairement les UIDs des messages et accélérer les synchronisations suivantes (n'accélère pas la première migration).
Vous pouvez également supprimer les messages du premier serveur avec l'argument --delete1.
Enfin, avant de lancer votre migration, n'hésitez pas à utiliser l'argument --dry pour voir ce que ferai imapsync, sans l'appliquer.