
Rapide procédure pour mettre en place des règles de quota de notre serveur IMAP Dovecot sur une Fedora 20.
Pour rappel, ce qui suit fait référence à un serveur de messagerie basé sur Postfix et Dovecot. Voir ce billet – et ceux qui suivent – pour connaitre la base : Serveur de messagerie simple avec Postfix et Dovecot.
Le présent tutoriel est testé sur une Fedora 20 avec Dovecot 2.2.12
Configuration des quotas
Editer le fichier de configuration /etc/dovecot/conf.d/15-lda.conf
et ajouter le plugin quota
:
protocol lda { mail_plugins = $mail_plugins sieve quota
Faire de même pour le protocole IMAP avec imap_quota
dans le fichier /etc/dovecot/conf.d/20-imap.conf
:
protocol imap { mail_plugins = $mail_plugins quota imap_quota
Nous allons stocker les configurations de quota dans la table utilisateurs de MySQL, si elle n’existe pas déjà il faut que la colonne quota
soit ajoutée. Pour rappel, voici la définition de la table utilisateurs utilisée par Postfix/Dovecot :
CREATE TABLE IF NOT EXISTS `MX_users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(128) NOT NULL, `password` varchar(128) NOT NULL, `name` varchar(128) NOT NULL DEFAULT '', `uid` smallint(5) unsigned NOT NULL DEFAULT '6000', `gid` smallint(5) unsigned NOT NULL DEFAULT '6000', `domain` varchar(128) NOT NULL DEFAULT '', `maildir` varchar(255) NOT NULL DEFAULT '', `quota` int(11) DEFAULT NULL, `is_imap` tinyint(1) unsigned NOT NULL DEFAULT '1', `is_active` tinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY (`id`), KEY `domain` (`domain`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
La prise en charge de MySQL par Dovecot se situe sous /etc/dovecot/conf.d/auth-sql.conf.ext
et ressemble à cela :
userdb { driver = sql args = /etc/dovecot/mysql_users.cf }
On peut maintenant définir nos règles de quota par défaut dans le fichier /etc/dovecot/conf.d/90-quota.ext
:
plugin { quota_rule = *:storage=1000M quota_rule2 = Trash:storage=+100M quota_grace = 10%% }
Dans cet exemple, chaque boite aux lettres a 1000Mo de capacité, et il y a un bonus de 100Mo accordé pour les messages en corbeille. Le quota par utilisateur peut substituer les règles par défaut en utilisant les informations de la colonne quota
de la table utilisateurs (/etc/dovecot/mysql_users.cf
) dont voici la requête user_query
mise-à-jour, celle-ci sert à retourner les informations d’un utilisateur :
user_query = SELECT maildir, uid, gid, CONCAT('*:storage=',quota) AS quota_rule FROM MX_users WHERE email = '%n' AND domain = '%d'
On voit que l’information quota_rule
est retournée et sera utilisée pour fixer le quota de l’utilisateur. Les valeurs possibles pour le champ « quota » sont les suivantes :
- NULL : garde les valeurs par défaut
- 0 (zero) : désactive les quotas pour l’utilisateur
- Tout autre valeur sera le nombre de Ko alloués
Lorsque les modifications sont effectuées, il suffit de redémarrer Dovecot :
systemctl restart dovecot.service
Vérifier les logs /var/log/dovecot-lda.log
et /var/log/dovecot-lda-errors.log
afin de voir si les messages sont toujours bien acheminés. Depuis Mozilla Thunderbird il est possible de vérifier le quota alloué à une boite aux lettre, pour cela il faut faire un clic-droit sur Inbox -> Propriétés-> Quota.

Le webmail Roundcube donne également cette information dans le coin bas gauche de son interface.

Merci, mais cela ne fonctionne pas pour moi sur une Debian 3.2 avec un Dovecot 2.1.7.
Dans mon /etc/dovecot/conf.d/auth-sql.conf.ext
j’ai ces lignes :
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/vmail/%d/%n
}
et c’est incompatible avec votre ligne sql !
Merci