Dovecot结合MySQL用户数据配置mdbox存储配额问题
嘿,我懂你现在的困扰——本来用static userdb驱动搭配mdbox存储一切正常,但想换成MySQL里的用户数据来动态管理每个用户的配额对吧?刚好我折腾过这个场景,给你一步步捋清楚怎么弄:
首先得把userdb的驱动从static切换到sql,你现在把sql驱动的配置注释掉了,先把它打开,同时注释掉static的配置:
userdb { #driver = static #args = uid=vmail gid=vmail home=/var/mail/vmail/%d/%n driver = sql args = /etc/dovecot/dovecot-sql.conf.ext }
接下来是最关键的user_query配置,我给你补全正确的写法。你的virtual_users表里的quota_bytes存的是600M这种易读格式,Dovecot本身就能直接识别,不用转成字节数。这个查询需要返回Dovecot必须的基础用户信息,再加上配额规则:
user_query = SELECT email AS user, 'vmail' AS uid, 'vmail' AS gid, '/var/mail/vmail/%d/%n' AS home, quota_bytes AS quota_rule FROM virtual_users WHERE email = '%u';
这里的quota_rule字段会被Dovecot直接识别为该用户的配额限制,比如600M就代表这个用户的邮箱最大可用600M空间。
然后你得全局开启配额插件,不然Dovecot不会处理配额逻辑。在dovecot.conf里找到mail_plugins这一行,把quota加进去:
mail_plugins = $mail_plugins quota
另外,保险起见,在plugin配置块里明确指定mdbox的配额类型(其实只要开启quota插件+user_query返回配额规则就够,但加上这个更清晰):
plugin { quota = mdbox:User quota }
最后别忘了做两步验证:
- 重启Dovecot让配置生效:
systemctl restart dovecot - 用doveadm命令测试用户信息,看配额是否正确加载:
doveadm user pawal@example.de
如果输出里能看到quota_rule: *:storage=600M这类内容,就说明配置成功了。
对了,你的password_query已经完全没问题,不用改动,认证逻辑和用户信息/配额是独立的,保持原来的就行。要是配置后还有问题,直接去看Dovecot的日志(一般是/var/log/dovecot.log或者/var/log/mail.log),里面会有具体的错误提示,比如SQL语法错了、访问MySQL权限不够之类的,对着改就行。
备注:内容来源于stack exchange,提问作者pawal

