[Dovecot](https://www.dovecot.org/) est un serveur permettant l'accès à des emails avec les protocoles [POP](https://fr.wikipedia.org/wiki/Post_Office_Protocol) et [IMAP](https://fr.wikipedia.org/wiki/Internet_Message_Access_Protocol). Il possède toutes les fonctionnalités indispensables pour nous : la couche [SSL/TLS](HowtoSSL) pour sécuriser les échanges réseau, l'intégration avec [Postfix](HowtoPostfix), la gestion de l'authentification avec [LDAP](HowtoLDAP), le support du format de stockage [Maildir](https://fr.wikipedia.org/wiki/Maildir) et les filtres [Sieve](https://fr.wikipedia.org/wiki/Sieve). Nous aimons sa légèreté et sa rapidité, nous l'avons définitivement adoptés sur nos serveurs de messagerie en remplacement de [Courier POP/IMAP](http://www.courier-mta.org/).
> * Note* : le paquet `dovecot-ldap` est utile uniquement pour gérer l'authentification avec un annuaire [LDAP](HowtoLDAP). Il est également possible de gérer l'authentification avec une base de données SQL, il faudra alors installer le paquet `dovecot-mysql` ou `dovecot-pgsql`.
Il est important de commenter la ligne suivante si on n'utilise pas du tout l'authentification via PAM car cela évite d'avoir plusieurs secondes de lag à chaque requête POP/IMAP ! Cela se fait en commentant la ligne suivante dans le fichier `/etc/dovecot/conf.d/10-auth.conf` :
On conseille d'utiliser les indexes Dovecot, cela permet d'optimiser le fonctionnement de Dovecot.
Par défaut, les indexes sont stockés à la racine de chaque Maildir, mais l'on peut aussi stocker les indexes ailleurs pour de meilleurs performances (par exemple sur un disque séparé, et même plus rapide). On spécifie alors à l'option `mail_location` :
Dovecot fournit en local un agent de livraison (LDA) nommé `dovecot-lda`.
On recommande d'utiliser la commande `deliver`, qui est un lien symbolique, pour l'usage des filtres Sieve dont celui-ci peut être utile dans le cas d'extension d'adresse (subaddressing) tel que `foo+bar@domaine.net`.
On peut activer une compression au niveau du protocole IMAP ([commande COMPRESS dans la RFC4978](https://tools.ietf.org/html/rfc4978#section-3)]).
Cela permet notamment de réduire la bande passante utilisée.
Il faut activer le plugin *imap_zlib* comme ceci :
~~~
protocol imap {
mail_plugins = $mail_plugins imap_zlib
}
~~~
Pour vérifier que la compression est bien active, on peut se connecter en IMAP, et voir lors du login si la compression est bien en mode *deflate* : **COMPRESS=DEFLATE**
~~~
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
a1 LOGIN foo password
a1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE COMPRESS=DEFLATE] Logged in
Sieve est un langage permettant d'écrire des règles de filtrage d'emails, du même type que [procmail](https://fr.wikipedia.org/wiki/Procmail).
Sieve est normalisé via la [RFC 5228](https://tools.ietf.org/html/rfc5228) et plusieurs clients email supportent la gestion de règles Sieve (*Thunderbird*, *Roundcube, *Ingo*…).
Si on créer un fichier de règle global, par exemple dans /etc/dovecot/sieve.global, il faut généré le fichier de règle pré-compilé avec la commande sievec :
~~~
# sievec /etc/dovecot/sieve.global
~~~
Sinon on peux avoir ce message d'erreur dans les logs mail :
~~~
The LDA Sieve plugin does not have permission to save global Sieve script binaries; global Sieve scripts like `/etc/dovecot/sieve.global' need to be pre-compiled using the sievec tool
Si l'on a bien installé le package `dovecot-managesieved`, Dovecot supporte le protocole *managesieve* qui permet d'éditer les règles
depuis un [client compatible](http://sieve.info/clients) : *Mozilla Thundebird* via une [extension](http://sieve.mozdev.org/), [Roundcube](HowtoMail/Roundcube), Horde [Ingo](https://www.horde.org/apps/ingo) etc.
Ensuite, il suffit de créer un répertoire _dovecot.rawlog_ dans le $HOME de l'utilisateur (accessible en écriture évidemment), et toutes les commandes IMAP passées seront stockées dans des fichiers : `<annee><mois><jour>-.*.{in,out}`
À chaque login, dovecot fork un processus. Afin d'éviter les fork-bomb s'il y a trop de connexions il y a une limite par défaut à 128. L'augmenter peut résoudre des problèmes si le serveur reçoit de nombreuses connexions.
~~~
login_max_processes_count = 256
~~~
Il faut en parallèle augmenter la limite sur le nombre de fichiers ouverts, dans _/etc/default/dovecot_:
Et suivant les cas, il peut être nécessaire d'adapter la configuration. Le mieux est de faire des tests, notamment pour vérifier si les messages ne sont pas téléchargés en double en POP, si les dossiers IMAP s'affichent correctement (pas de doublons, accessible au même niveau). Voici un exemple de directive qui peuvent être adaptées :
dovecot: imap(foo): Fatal: block_alloc(16777216): Out of memory
dovecot: imap(foo): Fatal: master: service(imap): child 666 returned error 83 (Out of memory (service imap { vsz_limit=256 MB }, you may need to increase it))
Il se peut que la configuration soit bonne mais qu'il y ait tout de même une erreur (un certificat SSL/TLS qui n'existe pas, par exemple), on peut alors lancer dovecot en mode debug :
Si vous constatez une lenteur à chaque requête avec votre client POP/IMAP (Roundcube, Thunderbird etc.), vérifiez que vous avez désactivé l'authentification via PAM qui rajoute plusieurs secondes de lag si elle n'est pas utile ! La ligne suivante doit être commentée dans le fichier `/etc/dovecot/conf.d/10-auth.conf` :
### Erreur ".dovecot.sieve/tmp failed: Not a directory"
Par défaut, Dovecot considère que tout ce qui commence par un `.` est une Maildir. Si vous avez donc un fichier `.dovecot.sieve` accessible dans `mail_location`, il va considérer que c'est une Maildir et cela provoquera des erreurs du type :
~~~
dovecot: imap(jdoe@example.com): Error: stat(/home/vmail/example.com/jdoe/.dovecot.sieve/tmp) failed: Not a directory
~~~
La solution est que `.dovecot.sieve` ne soit pas accessible dans `mail_location` ou de modifier `sieve = ~/.dovecot.sieve` pour que cela ne commence pas par un `.`.
Vous pouvez essayer de supprimer les indexes et redémarrer Dovecot.
Si cela ne résoud pas le souci, cela peut être parce que vous avez une Maildir « corrompue » : fichiers de taille vide, permissions incorrectes... vous devrez résoudre ce problème avant de supprimer les indexes.