mardi 5 octobre 2010

Archiver ses mails avec IMAP

Cela fait 7 ans que je suis dans la même société et j'ai toujours conservé mes mails. Cela m'arrive d'avoir besoin de revenir quelques années en arrière pour récupérer une info sur un projet ou des contacts. Au départ, j'utilisait un compte POP3 et mes mails étaient donc archivés sur mon compte utilisateur. Nous avons ensuite changé de fournisseur et par la même occasion nous sommes passés sur IMAP.

Je peux, aujourd'hui, consulter mes mails depuis n'importe quel accès Internet, cependant j'ai récemment découvert que la taille de la boîte mail avait une limite de 2Go, dérisoire par rapport à mon ancien espace de stockage... Autre problème, mes anciens mails stockés sur mon disque local ne sont pas sur le serveur IMAP donc pas visible depuis l'extèrieur.

La synchro entre deux comptes IMAP...

L'idée est de créer plusieurs boîtes mails d'archives, par exemple jeanpul2010, jeanpul2009, ... et de transférer les mails de la boîte "principale" vers la/les boîtes archives. Pour faire le transfert, je vais commencer par utiliser un soft, développé par Gilles LAMIRAL. Cet outil se nomme imapsync. La ligne de commande est on ne peut plus simple,

imapsync -host monserveurimap.net --user1 jeanpul --password1 jp --user2 jeanpul2010 --password2 jp --noauthmd5

Cela permet de transférer (synchroniser) l'ensemble des mails (avec les folders) d'un compte vers un autre. Chez mon fournisseur (et cela ce comprend), chaque compte à une limite quotidienne de réception en nombre de mails, par conséquent lorsque il y a trop de mails à transférer, la commande échoue. On peut interrompre la commande et la relancer le lendemain sans problème, les mails déjà existant ne sont pas copiés.

...puis entre un maildir et un compte IMAP

Utiliser imapsync permet donc un archivage régulier sans trop de soucis. Cependant, dans mon cas, il me reste à rendre accessible mes mails qui sont stockés sur ma machine.

Utiliser un serveur IMAP local
J'utilise la solution Courier qui comprends un serveur IMAP tournant sur le répertoire contenant les mails au format maildir. Mes mails étaient stockés par kmail au format maildir... de kmail. Le format est "quasiment identique", avec un répertoire par folder contenant 3 sous répertoires cur, new et tmp. La solution Courier contient un binaire, maildirmake, qui permet de créer l'arborescence comme il le faut et d'y ajouter des folders. Cette commande m'a permit de comparer le format maildir de "kmail" au format maildir de Courier afin d'automatiser le passage de l'un à l'autre.

Manipuler des comptes IMAP par scripts

Pour aller plus loin et faire des opérations plus précises sur les comptes IMAP, j'ai découvert l'utilitaire imapfilter qui permet d'exécuter un script écrit en Lua et une API pour accéder et manipuler les comptes IMAP.

Voici un exemple de script permettant de copier (à la façon de imapsync mais sans la synchro) les mails et les folders d'un compte vers un autre pour une année donnée.

function copy_year(year, src, dst)
   results = src:sent_before('01-Jan-' .. (year+1)) * src:sent_since('01-Jan' .. year)
   results:copy_messages(dst)
end

function get_folder(folders, folder)
   for k, v in ipairs(folders) do
      if v:upper() == folder:upper() then
        return v
      end
   end
   return false
end

function copy_folders_rec(year, folder, src, dst)
   for _, f in ipairs(src:list_all(folder)) do
      dstfolder = get_folder(dst:list_all(folder), f)
      if not dstfolder then
        dst:create_mailbox(f)
        dst:subscribe_mailbox(f)
        dstfolder = f
      end
      copy_year(year, src[f], dst[dstfolder])
      copy_folders_rec(year, f, src, dst)
   end
end

srcaccount = IMAP {
   server = 'localhost',
   username = 'jeanpul',
   password = 'jp'
}

dstaccount = IMAP {
   server = 'imap.server.net',
   username = 'jp2007@jeanpul.com',
   password = 'jp'
}     

copy_folders_rec("2006", null, srcaccount, dstaccount)

J'utilise plus volontiers cette méthode car elle me permet également de faire tout un tas d'opérations de filtrage, de création/suppression et la gestion des dates est très pratique.

La suite...


Maintenant que mes mails sont archivés, accessibles depuis n'importe quel poste connecté à Internet, il me reste quand même un problème... les filtres. En effet, il serait bienvenue d'avoir ces filtres au niveau du serveur IMAP, sinon, il faut systématiquement avoir les mêmes règles de filtrages (sur certains clients Web, les filtres n'existent même pas) sur chaque client mail (Thunderbird, kmail, evolution, ...). En utilisant les scripts et imapfilter, cela pourrait être réalisable, cependant cela nécessiterai l'exécution des scripts depuis ma machine.

Aucun commentaire:

Enregistrer un commentaire