Looking for Computer Science  & Information Technology online courses ?
Check my new web site: https://www.yesik.it !

J'ai récemment eu besoin d'importer des messages dans Thunderbird. Plus précisément, je me suis trouvé dans le cas où j'avais une partie des messages sur un ancien ordinateur, et l'autre partie des messages sur un autre qui venait d'être installé depuis quelques jours. J'ai donc cherché un moyen de fusionner les deux boîtes de réception afin de tout récupérer sur l'ordinateur récent. À priori, c'est une tâche qui ne me semblait pas extraordinairement originale, et je m'attendais à trouver une solution rapidement. Mais rien dans les menus de Thunderbird. Pas vraiment d'extension adaptée sur le site de Mozilla. Quand au wiki du projet, il évoque plutôt la migration (le déplacement) des données d'un profil à l'autre [1] [2]. Bref, rien sur la fusion de messageries...

Le fichier mbox

Mbox.png

Le format de fichier mbox regroupe en réalité plusieurs formats légèrement différents. Mais dans tous, les nouveaux messages sont juste ajoutés à la fin du fichier. Quand un message est supprimé, il est marqué comme tel, mais l'espace qu'il occupe ne sera récupéré qu'à la prochaine compression du fichier.

Généralement les logiciels de messagerie procèdent régulièrement à la compression du fichier: soit, par exemple, après la suppression d'un certain nombre de messages, ou quand l'espace perdu dépasse une certaine taille.

Je m'étais presque résigné à me lancer dans des manipulations compliquées, quand je me suis souvenu que Thunderbird, comme beaucoup de clients de messageries, utilise le format mbox. Pour être tout à fait honnête, le format mbox n'existe pas. En réalité, il en existe différentes versions plus ou moins compatibles entre elles.

Tous ces formats ont la particularité de simplement enregistrer les messages les uns après les autres. Ils ne contiennent pas d'index ni d'autre structure de données qui s'opposeraient à l'ajout sauvage de messages à la fin du fichier. C'est cette propriété des fichiers mbox que je vais exploiter: ainsi, pour fusionner deux boîtes de messages, il suffit de concaténer les deux fichiers!

Le profile

La question restante est maintenant de savoir sont ces fameux fichiers mbox. Ce n'est pas trop dur à résoudre puisque la documentation de Thunderbird est assez détaillée sur ce sujet. Et même sans la documentation, un peu de curiosité permet de trouver la réponse.

Comme beaucoup de clients de messagerie, Thunderbird permet de créer plusieurs profils (profiles). Un profil est un dossier qui regroupe les réglages, la configuration, le carnet d'adresse, les messages, ... bref tous les réglages spécifiques à un utilisateur.

Selon votre système d'exploitation l'emplacement exact des profils Thunderbird peut varier.
Système d'exploitation Emplacement habituel
Windows NT (NT4.x/2000/XP/Vista/7) "%APPDATA%\Mozilla\"
Windows 95 (without Desktop Update) C:\Windows\Mozilla
Windows 95 (with Desktop Update)/98/Me C:\Windows\ApplicationData\Mozilla\
C:\Windows\Profiles\<Windows login/user name>\Application Data\Mozilla\
Unix/Linux ~/.mozilla/
~/.thunderbird/
~/.icedove/ (sous Debian)
Mac OS X ~/Library/Mozilla/
~/Library/Application Support/

Dans une installation standard de Thunderbird sur Linux/Unix, les profils sont stockés dans un fichier caché. Il vous faudra un peu chercher peut-être pour le trouver. Comme j'utilise Debian, ce dossier est ~/.icedove.

Définition: Icedove

Icedove est une version Debianisée de Thunderbird dans laquelle les éléments non-compatibles avec la licence libre de Debian ont été retirés. Il s'agit essentiellement du logo et du nom.
sh$ ls .icedove/
37j1wuvz.default  profiles.ini
sh$ ls .icedove/37j1wuvz.default/
abook.mab          global-messages-db.sqlite  pluginreg.dat
Cache              history.mab                prefs.js
cert8.db           ImapMail                   secmod.db
compatibility.ini  key3.db                    signons.sqlite
compreg.dat        localstore.rdf             training.dat
cookies.sqlite     lock                       traits.dat
extensions         Mail                       urlclassifier3.sqlite
extensions.cache   mailViews.dat              virtualFolders.dat
extensions.ini     mimeTypes.rdf              XPC.mfasl
extensions.rdf     panacea.dat                xpti.dat
folderTree.json    permissions.sqlite         XUL.mfasl

Ainsi, dans le dossier des profils, je trouve un dossier avec un nom cryptique: 37j1wuvz.default. Il s'agit du dossier contenant mon profil par défaut.

À l’intérieur de celui-ci se trouvent tous mes réglages, configuration, etc. Et surtout, le dossier Mail qui contient mes différents comptes de messagerie.

sh$ ls .icedove/37j1wuvz.default/Mail
Local Folders  pop.ac-rennes.fr  smart mailboxes  ssl0.ovh.net

Vous le constatez, chaque compte de messagerie est à son tour représenté par un dossier dans Mail. Si j'examine le contenu d'un de ces dossiers, je trouve enfin le fameux fichier mbox correspondant. Celui-ci est enregistré sous le nom Inbox:

sh$ ls .icedove/37j1wuvz.default/Mail/pop.ac-rennes.fr/
Inbox  Inbox.msf  msgFilterRules.dat  popstate.dat  Trash  Trash.msf

Fusionner deux mbox

Après cette exploration, passons à ce qui nous intéressait en premier lieu: la fusion de deux boîtes de messagerie.

Attention:

À partir d'ici, nous allons modifier les fichiers de messagerie de Thunderbird. Il y a toujours un risque de corruption des données. Si vous avez des messages importants, je vous conseille fortement une sauvegarde avant de poursuivre!

Dans la section précédente, j'ai retrouvé le fichier mbox correspondant à mon profil sur la machine où je veux fusionner les données. Parallèlement, j'ai fait la même manipulation sur mon autre ordinateur pour retrouver l'autre fichier mbox à fusionner et le récupérer, par exemple, sur une clé USB. Reste maintenant à les concaténer:

sh$ cat < /path/to/old/profile//pop.ac-rennes.fr/Inbox \
           >> .icedove/37j1wuvz.default/Mail/pop.ac-rennes.fr/Inbox

Piège:

Le format de fichier mbox est rudimentaire et il ne supporte pas les accès concurrents. Assurez-vous donc que Thunderbird ne tourne pas quand vous faites cette manipulation!

Et voilà! Rien d'autre à faire: à la prochaine ouverture de Thunderbird, celui-ci va détecter la modification du fichier mbox et relancer automatiquement l'indexation des messages.

Pour finir

La manipulation décrite ici – à savoir concaténer deux mbox pour les fusionner – peut être tentée avec n'importe quel client de messagerie utilisant ce format de boîte aux lettres.

Si cela a de grandes chances de fonctionner pour fusionner deux mailboxes créées par la même application, c'est plus sujet à caution pour la fusion de boîtes de messageries issues de deux applications différentes: en effet, toutes n'utilisent pas exactement le même format fichier, ce qui peut rendre la manipulation plus compliquée qu'une simple concaténation.

Ressources