Ted écrit des trucs

Sur des sujets en lien avec la vie privée, ou parfois pas.

Gérer ses mails en local : étape 1, sychronisation IMAP avec OfflineIMAP.

— modifié le

Ce billet fait partie d'une série d'articles présentant la façon dont je gère mes mails en local. Si vous êtes arrivés là sans lire l'introduction, c'est probablement une bonne idée de commencer par le début.


Donc, OfflineIMAP est un utilitaire qui va aller se connecter à un serveur IMAP et copier tout ce qu'il y a dedans. En fait, il va même faire mieux que ça : il va synchroniser tout ce qui se passe d'un côté de l'autre, pour que ce soit toujours le même contenu qui soit sur le serveur et sur le client. Par exemple, si je me connecte avec OfflineIMAP à une adresse GMail, que je récupère un message non lu et que je l'ouvre avec un client mail, à la prochaine exécution de OfflineIMAP, il va envoyer au serveur « C'est bon, tu peux noter que ce mail a été lu ». De la même façon, si je supprime un mail du côté client, ça va le supprimer sur le serveur - bien entendu, ce comportement par défaut peut être changé.

Donc, commençons par le début.

Installation et configuration

On installe OfflineIMAP :

aptitude install offlineimap

on crée un dossier pour mettre les mails qu'on va récupérer :

mkdir ~/Mail

et on modifie le fichier de config', ~/.offlineimaprc (en le créant si ça n'a pas été fait automatiquement lors de l'installation).

Le fichier de config' de OfflineIMAP est très simple à comprendre et à modifier. Il commence par une section [general] qui va contenir des morceaux de configuration globale :

[general]
accounts = dam,spam,ddf
ui = quiet

ici, la ligne accounts = dam,spam,ddf déclare les différents comptes auxquels il va se connecter, et la ligne ui = quiet signifie que lorsqu'on lance offlineimap, on ne veut pas qu'il pose de questions à l'utilisateur (ce qui est logique, étant donné qu'on va exécuter cette commande automatiquement plus tard). Changez dam,spam,ddf en des noms (quelconques) pour reconnaître vos différentes adresses mail avant de poursuivre.

Pour chaque compte c ainsi défini, on va ajouter trois sections : [Account c], [Repository c_local] et [Repository c_remote]. Voici par exemple ce que contient la section pour mon compte nommé dam :

[Account dam]    
localrepository = damien_local
remoterepository = damien_remote

[Repository dam_local]
type = Maildir
localfolders = ~/Mail/ikura_damien/

[Repository dam_remote]
type = IMAP
remotehost = desfontain.es
remoteuser = damien
remotepass = nyyunvygbgururyvksbffvy
ssl = yes
sslcacertfile = /etc/ssl/certs/ca-certificates.crt

La plupart des lignes se comprennent immédiatement.

  • Les trois premières sont juste des déclarations pour la suite.
  • La section [Repository dam_local] contient des informations comme le type de la boîte mail locale (« Veut-on stocker tous ses mails dans un seul gros fichier ou bien plutôt avoir un fichier par e-mail dans un gros dossier ? » - la bonne réponse à cette question est « un fichier par e-mail », d'où le type Maildir et non pas Mailbox), et le dossier qui va contenir les mails de ce compte.
  • La section [Repository dam_remote] contient le type de la connexion distante, l'adresse du serveur, l'utilisateur, le mot de passe, le fait qu'on utilise SSL et l'emplacement des certificats. Si votre adresse est truc@machin.com, vous avez probablement envie de remplacer damien par truc et desfontain.es par imap.machin.com, ou machin.com, ou encore autre chose suivant le nom du serveur IMAP auquel vous voulez vous connectez. Les noms des serveurs IMAP des principaux fournisseurs d'accès sont trouvables par ici. Bien sûr, il faut aussi remplacer le mot de passe. Les deux commandes concernant SSL sont importantes, sans ça, votre mot de passe va joyeusement voyager en clair jusqu'au serveur.

Cette configuration marche si vous avez votre propre serveur IMAP, et fonctionne pour à peu près tous les fournisseurs de mail… Sauf GMail, qui a une configuration aussi bizarre que décriée par ceux qui programment des logiciels comme OfflineIMAP. Pour synchroniser une adresse GMail, la section remote doit ressembler à :

type = Gmail
remoteuser = ddfontaines@gmail.com
remotepass = eryrnfrgursnyfrcebcurg
realdelete = no

realdelete vaut no si l'on veut que supprimer un mail en local le mette dans la corbeille de GMail, et yes si on veut le supprimer du serveur « pour de vrai ».

Automatisation avec cron

On n'a clairement pas envie de taper offlineimap dans une console à chaque fois que l'on veut récupérer ses mails. Il convient donc de dire au système de faire ça tout seul comme un grand. Pour ça, on utilise cron, installé de base sous Debian et dérivés, programme qui lit un fichier de configuration et exécute les commandes qu'il y a dedans à intervalles réguliers. Pour modifier ce fichier, on tape dans une console :

`crontab -e`

et on rajoute une ligne ressemblant à ça :

`*/2 * * * * /usr/bin/offlineimap > /dev/null 2> /dev/null

en remplaçant les deux /dev/null par les endroits où on veut logger ce que renvoie la commande, si on a envie de le faire. Le */2 * * * * signifie « toutes les deux minutes », et on peut le modifier pour changer la fréquence à laquelle on veut que le système aille chercher les nouveaux messages. Pour plus d'informations sur la syntaxe de cron, on peut aller voir sa page Wikipédia, par exemple.

Il y aurait plus à dire sur OfflineIMAP, notamment la possibilité de ne récupérer que certains dossiers d'un compte sur un serveur IMAP, mais ça sort du cadre de ce billet.

Tout ce que je raconte ici sont mes opinions personnelles, pas celles de mon employeur.
Je suis toujours ravi de recevoir des réactions, critiques, questions, ou autres commentaires sur ce que j'écris. Envoyez-moi ce qui vous chante à se.niatnofsed@neimad.