This documentation is for Dovecot v2.x, see wiki1 for v1.x documentation.
Differences between revisions 2 and 33 (spanning 31 versions)
Revision 2 as of 2006-06-08 21:08:53
Size: 2014
Editor: TimoSirainen
Comment:
Revision 33 as of 2010-07-29 15:09:49
Size: 2969
Comment: Added info for loading the quota plugins in 2.0 and addtional hint if plugin is not loaded
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
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:
Line 3: Line 4:
There are different quota backends that Dovecot can use:  * [[Quota/FS|fs]]: Filesystem quota.
 * [[Quota/Dirsize|dirsize]]: The simplest and slowest quota backend, but it works quite well with mboxes.
 * [[Quota/Dict|dict]]: Store quota usage in a dictionary (e.g. SQL).
 * [[Quota/Maildir|maildir]]: Store quota usage in Maildir++ maildirsize files. This is the most commonly used quota for virtual users.
Line 5: Line 9:
 * [wiki:Quota/FS fs]: Filesystem quota enforcing.
 * [wiki:Quota/Dirsize dirsize]: The simplest quota backend. It scans all the files from mail directories to calculate the quota.
 * [wiki:Quota/Dict dict]: Store quota in a dictionary. Currently the only dictionary backend is MySQL.
 * [wiki:Quota/Maildir maildir]: Maildir++ quota.
== Enabling quota plugins ==
There are two quota related plugins:
Line 10: Line 12:
The quota is supported as a plugin for Dovecot. There exists a plugin named "quota" which does the actual work. For reporting quota information via IMAP there exists also "imap_quota" plugin. Usually you'd enable these by adding them to the `mail_plugins` settings in config file:  * quota: Implements the actual quota handling and includes also all the quota backends.
 * imap_quota: For reporting quota information via IMAP.

Enable them in dovecot.conf:

{{{
mail_plugins = $mail_plugins quota
protocol imap {
  mail_plugins = $mail_plugins imap_quota
}
}}}
'''Info:''' with Dovecot 2.0 you can enable the quota plugin also in 10-mail.conf instead of the global dovecot.conf:

{{{
mail_plugins = quota
}}}
For IMAP quota you can enable the quota plugin also in 20-imap.conf instead of the global dovecot.conf:
Line 14: Line 32:
  mail_plugins = quota imap_quota   mail_plugins = $mail_plugins imap_quota
Line 16: Line 34:
protocol pop3 {
  mail_plugins = quota
}
# In case you're using Dovecot-LDA:
protocol lda {
  mail_plugins = quota
} }}}
}}}
'''Hint:''' if you get the error message "Can't load plugin imap_quota_plugin: Plugin quota must be loaded also" you've maybe forget to load the global quota plugin as described above.
Line 24: Line 37:
Most of the quota backends have a few things in common: == Configuration ==
See [[Quota/Configuration]] for backend-independent quota configuration.
Line 26: Line 40:
You can set the quota as kilobytes (named '''storage''') and/or as number of messages (named '''messages'''). Usually only the '''storage''' quota is used. Usually these can be given to the quota backend as parameters, eg.: == Quota recalculation ==
If your quotas are out of sync, you can use {{{doveadm quota recalc}}} command to recalculate them.
Line 28: Line 43:
{{{
plugin {
  # 10MB quota limit
  quota = maildir:storage=10240
  # 1000 messages quota limit
  quota = maildir:messages=1000
  # 10MB + 1000 messages quota limit
  quota = maildir:storage=10240:messages=1000
} }}}
== Quota and Trash mailbox ==
Standard way to expunge messages with IMAP works by:
Line 38: Line 46:
The above example shows how to set the same quota globally for everone. You can override this for one or all users by returning `quota` field from userdb. See UserDatabase for more information about how to set them for the userdb you're using. Here's an example using SQL userdb:  1. Marking message with \Deleted flag
 1. Actually expunging the message using EXPUNGE command
Line 40: Line 49:
{{{
user_query = SELECT home, uid, gid, 'dirsize:storage=' || quota_bytes AS quota FROM users WHERE userid = '%u' }}}
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:
Line 43: Line 51:
With LDAP use something like:  1. COPY the message to Trash mailbox
 1. Mark the message with \Deleted
 1. Expunge the message from the original mailbox.
 1. (Maybe later expunge the message from Trash when "clean trash" feature is used)
Line 45: Line 56:
{{{
# quotaStorage must be in the format mentioned above
# For example: dirsize:storage=10240
user_attrs = uid,homeDirectory,,,uidNumber,gidNumber,quotaStorage=quota }}}
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:

 * Disable move-to-trash feature from client
 * You can create a separate quota rule ignoring Trash mailbox's quota. Note that this would allow users to store messages infinitely to the mailbox.
 * You can create a separate quota rule giving Trash mailbox somewhat higher quota limit (but not unlimited).

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

Quota

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:

  • fs: Filesystem quota.

  • dirsize: The simplest and slowest quota backend, but it works quite well with mboxes.

  • dict: Store quota usage in a dictionary (e.g. SQL).

  • maildir: Store quota usage in Maildir++ maildirsize files. This is the most commonly used quota for virtual users.

Enabling quota plugins

There are two quota related plugins:

  • quota: Implements the actual quota handling and includes also all the quota backends.
  • imap_quota: For reporting quota information via IMAP.

Enable them in dovecot.conf:

mail_plugins = $mail_plugins quota
protocol imap {
  mail_plugins = $mail_plugins imap_quota
}

Info: with Dovecot 2.0 you can enable the quota plugin also in 10-mail.conf instead of the global dovecot.conf:

mail_plugins = quota

For IMAP quota you can enable the quota plugin also in 20-imap.conf instead of the global dovecot.conf:

protocol imap {
  mail_plugins = $mail_plugins imap_quota
}

Hint: if you get the error message "Can't load plugin imap_quota_plugin: Plugin quota must be loaded also" you've maybe forget to load the global quota plugin as described above.

Configuration

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:

  • Disable move-to-trash feature from client
  • You can create a separate quota rule ignoring Trash mailbox's quota. Note that this would allow users to store messages infinitely to the mailbox.
  • You can create a separate quota rule giving Trash mailbox somewhat higher quota limit (but not unlimited).

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.

None: Quota (last edited 2021-06-15 23:54:28 by MichaelSlusarz)