~bohwaz/blog/

Avec de vrais morceaux de 2.0 !

Quitter GMail, parce que c'est pourri, et synchroniser ses mails en local avec dovecot et OfflineIMAP

Après avoir passé beaucoup de temps à utiliser mon propre serveur de mails, j'ai passé quelques années chez GMail. C'était pas trop mal. Le webmail est clairement le point faible : moche, lent, peu pratique. Mais qui utilise encore un webmail de nos jours hein ? Mais en plus du fait que filer tous mes mails perso à Google ne me plaisait pas du tout, le service a commencé à se dégrader rapidement : beaucoup de spam, mails qui ne sont jamais reçus par mes destinataires, ou l'inverse, sans jamais laisser aucune trace, etc.

Depuis je suis repassé sur mon propre serveur mail, à base d'Exim, dovecot et SpamAssassin. J'ai aussi mis roundcube comme webmail, mais ça ne me plaisait pas vraiment, j'ai donc développé mon propre webmail assez rapidement. Il ne passe pas par IMAP mais lit directement les dossiers Maildir. Du coup c'est plus rapide. Mais pas assez à mon goût, pour une utilisation intensive avec des milliers d'utilisateurs il fallait quelque chose d'autre, j'ai donc développé un serveur SMTP qui filtre directement les messages et les stocke en base de données et memcache. Puis un serveur IMAP pour voir tout ça. Et un webmail qui tape dans memcache et la base de données. C'est pas mal, c'est rapide, mais encore incomplet, je mettrais ça en open source quand ça sera plus avancé.

J'ai aussi développé un gestionnaire de liste de discussion/diffusion en PHP qui est appelé par EXIM, parce que bon mailman ça va bien 5 minutes mais c'est chiant et lourd.

Bref on n'est jamais mieux servi que par soi-même.

Mais là n'est pas le sujet, car aujourd'hui je vais vous parler de synchroniser ses mails en local pour pouvoir y accéder hors ligne. Oui je sais les clients mails ont souvent une option pour synchroniser les dossiers IMAP pour une utilisation hors ligne. Mais ils stockent souvent ces mails dans un format spécifique, ça prend de la place, c'est lent et peu pratique.

Alors que la bonne solution c'est d'utiliser OfflineIMAP pour synchroniser vos dossiers IMAP en local, ainsi vous disposez d'une copie exacte de votre compte IMAP, que vous pourrez donc restaurer en un rien de temps si le serveur perd vos mails, ou si vous décidez de changer de fournisseur de mails.

Je ne vais pas vous raconter ici comment configurer OfflineIMAP, d'autres l'ont déjà fait mieux que moi, genre saimon.org par exemple. Je peux juste dire que c'est super simple à faire et que ça marche au poil. N'oubliez juste pas de mettre "sep = /" dans le repository local, sinon vous allez avoir des problèmes. Mon ~/.offlineimaprc pour l'exemple :

[general]
accounts = MyServer
ui = Blinkenlights

[Account MyServer]
localrepository = Local
remoterepository = Remote

[Repository Local]
type = Maildir
localfolders = ~/Mail
sep = /

[Repository Remote]
type = IMAP
ssl = yes
remotehost = *****
remoteuser = *****
remotepass = *****

spamfolder = Junk

Et ensuite pour accéder à vos mails depuis votre client mail il vous faut utiliser un serveur IMAP local, par exemple dovecot.

# apt-get install dovecot-imapd

Ensuite tout ce que vous avez à faire c'est d'indiquer à dovecot où sont stockés vos mails. Éditez la configuration locale de dovecot :

# nano /etc/dovecot/local.conf

Et inscrivez-y :

mail_location = maildir:%h/Mail:LAYOUT=fs

Évidemment il faut adapter "/Mail" à la localisation de vos mails dans votre home. Moi c'est dans ~/Mail donc.

Si vous voulez retrouver les répertoires "magiques" de GMail genre avec tous les mails ou tous les mails marqués, vous pouvez utiliser l'extension virtual en inscrivant dans la config ce qui suit :

mail_plugins = $mail_plugins virtual

namespace {
  prefix = virtual/
  location = virtual:%h/Mail/virtual
}

Vous pouvez maintenant redémarrer dovecot :

# service dovecot restart

Et ensuite pour les dossiers virtuels il suffit de créer un répertoire dans votre dossier ~/Mail/virtual et d'y placer un fichier nommé dovecot-virtual contenant les règles. Par exemple si on veut tous les messages non lus sauf les spams, les listes et la corbeille on crée un dossier ~/Mail/virtual/new/ et on inscrit dans le fichier dovecot-virtual :

*
-INBOX/Listes/*
-Trash
-Junk
  unseen

Pour les messages récents ça sera :

*
-INBOX/Listes/*
-Trash
-Junk
-Sent
  all younger 5184000

Et les messages marqués :

*
-Trash
-Junk
  flagged

Et voilà, vous pouvez maintenant faire pointer votre client mail sur localhost :)

Écrire un commentaire
(facultatif)
(facultatif)
(obligatoire)
                     _                                 
  ___ ___  _ __   __| | __ _ _ __ ___  _ __   ___ _ __ 
 / __/ _ \| '_ \ / _` |/ _` | '_ ` _ \| '_ \ / _ \ '__|
| (_| (_) | | | | (_| | (_| | | | | | | | | |  __/ |   
 \___\___/|_| |_|\__,_|\__,_|_| |_| |_|_| |_|\___|_|   
                                                       
(obligatoire)

Les adresses internet seront converties automatiquement.
Tags autorisés : <blockquote> <cite> <pre> <code> <var> <strong> <em> <del> <ins> <kbd> <samp> <abbr>