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


Quota backend specifies the method how Dovecot keeps track of the current quota usage. They don't (usually) specify users' quota limits, that's done by returning extra fields from userdb. There are different quota backends that Dovecot can use:

Quota service

The quota service allows postfix to check quota before delivery:

service quota-status {
    executable = quota-status -p postfix
    inet_listener {
        port = 12340
        # You can choose any port you want
    client_limit = 1

And then have postfix check_policy_service check that:

smtpd_recipient_restrictions =

For more about this service see

Enabling quota plugins

There are three quota related plugins:

Enable them in configuration files, e.g.:


# Space separated list of plugins to load for all services. Plugins specific to
# IMAP, LDA, etc. are added to this list in their own .conf files.
mail_plugins = $mail_plugins quota


protocol imap {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins imap_quota

conf.d/90-quota.conf: (for use with the quota-status service)

plugin {
    quota_grace = 10%%
    # 10% is the default
    quota_status_success = DUNNO
    quota_status_nouser = DUNNO
    quota_status_overquota = "552 5.2.2 Mailbox is full"


See Quota/Configuration for backend-independent quota configuration.

Quota recalculation

If your quotas are out of sync, you can use doveadm quota recalc command to recalculate them.

Quota and Trash mailbox

Standard way to expunge messages with IMAP works by:

  1. Marking message with \Deleted flag
  2. Actually expunging the message using EXPUNGE command

Both of these commands can be successfully used while user's quota is full. However many clients use a "move-to-Trash" feature, which works by:

  1. COPY the message to Trash mailbox
  2. Mark the message with \Deleted
  3. Expunge the message from the original mailbox.
  4. (Maybe later expunge the message from Trash when "clean trash" feature is used)

If user is over quota (or just under it), the first COPY command will fail and user may get an unintuitive message about not being able to delete messages because user is over quota. The possible solutions for this are:

To make sure users don't start keeping messages permanently in Trash you can use a nightly cronjob to expunge old messages from Trash mailbox.

Quota (last edited 2015-08-27 12:24:43 by TonyDenHaan)