This documentation is for Dovecot v2.x, see wiki1 for v1.x documentation.


There are different quota backends that Dovecot can use:

There are currently two quota related plugins:

Usually you'd enable these by adding them to the mail_plugins settings in the config file:

protocol imap {
  mail_plugins = quota imap_quota
protocol pop3 {
  mail_plugins = quota
# In case you're using deliver:
protocol lda {
  mail_plugins = quota

Most of the quota backends have a few things in common:

You can set the quota as kilobytes (called storage) and/or as number of messages (called messages). Usually only the storage quota is used. These limits can be given to the quota backend as parameters, e.g.:

plugin {
  # 10 MB quota limit
  quota = maildir:storage=10240
  # 1000 messages quota limit
  quota = maildir:messages=1000
  # 10 MB + 1000 messages quota limit
  quota = maildir:storage=10240:messages=1000

The above example shows how to set the same quota globally for everyone. You can override this for one or all users by returning a quota [:UserDatabase/ExtraFields:extra field] from the user database (in the exact same format as above). See UserDatabase for more information about how to set them for the user database you are using.



# MySQL:
user_query = SELECT home, uid, gid, concat('maildir:storage=', quota_kb) AS quota FROM users WHERE userid = '%u'
# PostgreSQL, SQLite:
user_query = SELECT home, uid, gid, 'maildir:storage=' || quota_kb AS quota FROM users WHERE userid = '%u'


# quotaStorage must be in the format mentioned above
# For example: maildir:storage=10240
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaStorage=quota

# If you have the quota already as kilobytes in LDAP, there's a kludgy way to use it directly:
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaStorage=quota=maildir:storage 

If you have the quota stored as bytes, you'll need to use a [:PostLoginScripting:post-login scripting] trick to use them. Something like:

# quotaStorage contains the quota in bytes. It's exported into
# $QUOTA_BYTES environment.
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,quotaStorage=quota_bytes

And make imap's mail_executable point to a script:

export QUOTA=maildir:storage=`expr $QUOTA_BYTES / 1024`
exec /usr/local/libexec/dovecot/imap