Migration Evolution vers Claws-mail

EDIT: Comme indiqué dans les commentaires, Claws-mail permet d’utiliser des boites aux lettres au format mbox à l’aide du plugin mailmbox, donc la migration peut se faire sans convertir sa boite à moins de vouloir utiliser le format d’origine de claws-mail

Changer de client mails pour une raison x oblige à migrer la tonne de mails plus ou moins utiles amassées au fils des années et pour peu que l’ancien et le nouveau client mail utilisent des formats de stockage différents, on peut se préparer à une plus ou moins longue recherche sur le net.

A priori, les deux clients étant libres et utilisant des standards, je pensais que la migration ne serait qu’une formalité, mais il faut croire que migrer depuis Gnome Evolution vers Claws-mail n’est pas si courant.

Avant de passer aux choses sérieuses, une rapide liste non exhaustive des différents formats de stockage de courrier.

Formats de stockage

* mbox est sûrement le format le plus utilisé, les messages sont stockés dans un seul fichier, le début de chaque message correspondant à la ligne:

From  

* MH quant à lui correspond à un répertoire où chaque message est représenté par un fichier dont le nom représente sa position dans la boîte au lettre.

* Maildir est le plus récent (à ma connaissance) des formats de stockage de boîte aux lettres, il permet de pouvoir accéder simultanément au même message tout en se passant des verrous sur les fichiers par exemple sur un système de partage NFS.

Ceci dit, revenons à nos deux clients. Evolution utilise le format mbox, Claws-mail quant à lui utilise le format MH.

Claws-mail permet d’importer des fichiers mbox, mais un à la fois ce qui se révèle assez fastidieux si on a comme c’est mon cas, ~70 boîtes aux lettres dispersées dans plusieurs répertoires.
La recherche d’un script a été infructueuse hormis cette page qui traite de la conversion mbox<->Maildir, mais elle donne une piste -> l’utilisation de Mutt

Mutt

Mutt est un client mail en mode texte simple mais puissant.
Il reconnait plusieurs formats de boîte aux lettres dont les deux qui nous intéressent, et permet de sauvegarder dans un format différent de celui d’origine.

mutt -n -m MH -R -f boite_mbox

Une fois la liste des messages affichés, on sélectionne tous les messages en appuyant sur « T » puis en indiquant ~A, un appui sur « ; » puis « s » permet de sauver dans l’emplacement de votre choix.

C’est bien, mais il faudrait automatiser tout ça.

Créez un fichier /tmp/muttrc avec pour contenu:

macro index  "~A=fooyy"
folder-hook . push 

Ce dernier définit une macro qui reprend la démarche manuelle (il sauve par défaut dans ~/Mail/foo) et qui l’exécute sur le répertoire courant (la boîte ouverte) dés l’ouverture de mutt.

L’appel de:

mutt -F /tmp/muttrc -n -m MH -R -f boite_mbox

aura pour conséquence de convertir boite_mbox au format MH stocké dans ~/Mail/foo

Reste plus qu’à faire un script pour traiter tous les fichiers.

Préparation des fichiers

* Création d’un répertoire temporaire.
* Copie des mails d’evolution.
* Suppression des fichiers index, vide, etc.
* Suppression du fichier folders.db.

mkdir traitement
cd traitement
cp -a ~/.evolution/mail/local mail_tmp
find mail_tmp \( -name "*.cmeta" -o -name "*.index.data" -o -name "*.index" -o -name "*.ev-summary-meta" -o -name "*.ev-summary" -o -empty \) -delete
rm mail_tmp/folders.db

Conversion

* Création de l’arborescence. (il y aura des erreurs pour certains répertoires, ça n’impacte pas le résultat et j’ai la flemme de chercher à contourner :p)

Toujours dans le répertoire traitement.

mkdir mail_new
cd mail_new
find ../mail_tmp/ -type d -exec echo mkdir "'{}'" \; | sed -e 's/\.sbd//g' -e 's|\.\./mail_tmp/||g' | sh
find ../mail_tmp/ -type f -exec echo mkdir "'{}'" \; | sed -e 's/\.sbd//g' -e 's|\.\./mail_tmp/||g' | sh

* Script de conversion, à nommer par exemple convert_mail.sh

#!/bin/sh

src="$@"
dest=$(echo $@ | sed -e 's/\.sbd//g' -e 's|\.\./mail_tmp/||g' )

mutt -F /tmp/muttrc -n -m MH -R -f "$src"
mv ~/Mail/foo/* "$dest"
rm -rf ~/Mail/foo

* Plus qu’à le lancer sur chaque fichier:

find ../mail_tmp/ -type f -exec ./convert_mail.sh "{}" \;

Finalisation

On vérifie que les mails sont bien là puis on déplace le tout au bon endroit, Claws-mail utilise par défaut ~/Mail comme répertoire de base.

Toujours dans le répertoire traitement/mail_new

mv Inbox ~/Mail/inbox
mv Sent ~/Mail/sent
mv Drafts ~/Mail/draft
mv Outbox ~/Mail/queue
# Normalement, il n'y a plus de répertoire spécial.
mv * ~/Mail

Si vous avez déjà lancé une fois Claws-mail, il suffit de cliquer avec le bouton droit sur le dossier racine et de sélectionner Reconstruire l’arborescence.

Vous devriez vous retrouver avec votre ancienne arborescence :)

Commentaires (7)