Gérer ses mails en local : étape 1, sychronisation IMAP avec OfflineIMAP.
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.
- Étape 0 : Introduction
- Étape 1 : Synchronisation IMAP avec OfflineIMAP ← vous êtes ici !
- Étape 2 : Envoi d'e-mails avec msmtp et msmtpq
- Étape 3 : Configuration de mutt
- Étape 3 bis : Dose supplémentaire de mutt
- Étape 4 : Chiffrement et signature avec PGP
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 typeMaildir
et non pasMailbox
), 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 esttruc@machin.com
, vous avez probablement envie de remplacerdamien
partruc
etdesfontain.es
parimap.machin.com
, oumachin.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
où 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.