This documentation is for Dovecot v1.x, see wiki2 for v2.x documentation.
Differences between revisions 1 and 33 (spanning 32 versions)
Revision 1 as of 2005-10-28 15:35:03
Size: 1159
Editor: TimoSirainen
Comment:
Revision 33 as of 2017-10-16 06:16:41
Size: 2759
Editor: 2001:2060:49:110:d1bb:904:e0dd:e41
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
== Filesystem quota == = Quota =
Line 3: Line 3:
Dovecot doesn't work too well with filesystem quota currently. But there are a few things you can do: 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 5: Line 5:
 * Set index file location to some partition where there are no quota limits. Dovecot can't currently handle out-of-quota error conditions when updating indexes.
 * mbox should work somewhat nicely as long as `mbox_lazy_writes=yes` in config file. Although if user doesn't delete any mails when closing the mailbox, Dovecot gives an "internal error".
 * Maildir also needs to update `dovecot-uidlist` file, which can't handle out-of-quota errors. Its location can be set using "CONTROL" parameter in default_mail_env.
 * [[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 9: Line 10:
So, use something like: == Enabling quota plugins ==

There are currently 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.

Usually you'd enable these by adding them to the {{{mail_plugins}}} settings in the config file:
Line 12: Line 20:
# mbox:
default_mail_env = mbox:%h/mail:INBOX=/var/mail/%u:INDEX=/var/no-quotas/index/%u
protocol imap {
  mail_plugins = quota imap_quota
}
protocol pop3 {
  mail_plugins = quota
}
# In case you're using deliver:
protocol lda {
  mail_plugins = quota
} }}}
Line 15: Line 31:
# maildir:
default_mail_env = maildir:%h/Maildir:INDEX=/var/no-quotas/index/%u:CONTROL=/var/no-quotas/control/%u
}}}
== Configuration ==
Line 19: Line 33:
== Software quotas == The configuration is done differently for v1.0 and v1.1:
Line 21: Line 35:
Dovecot 1.0 supports quota using a quota plugin. It's currently discussed in [wiki:LDA Dovecot LDA] page and it supports only very simple quota calculation which is suitable only for mboxes. Maildir++ quota support will come later.  * [[Quota/1.0|v1.0 quota configuration]]
 * [[Quota/1.1|v1.1 quota configuration]]

== Quota and Trash mailbox ==

Standard way to expunge messages with IMAP works by:

 1. Marking message with \Deleted flag
 1. 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
 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)

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
 * Dovecot v1.0 + [[Quota/Maildir|Maildir++]] quota: You can completely ignore Trash mailbox from quota calculation by appending {{{:ignore=Trash}}} to the quota line. Note that this would allow users to store messages infinitely to the mailbox.
 * Dovecot v1.1 or [[Quota/1.1|v1.0 quota rewrite]]: You can ignore Trash like with v1.0, but you can also give a separate quota rule giving Trash mailbox somewhat more quota (but not unlimited).

To make sure users don't start keeping messages permanently in Trash you can use a nightly [[Plugins/Expire|cronjob or expire plugin (v1.1)]] 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 currently 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.

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
} 

Configuration

The configuration is done differently for v1.0 and v1.1:

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
  • Dovecot v1.0 + Maildir++ quota: You can completely ignore Trash mailbox from quota calculation by appending :ignore=Trash to the quota line. Note that this would allow users to store messages infinitely to the mailbox.

  • Dovecot v1.1 or v1.0 quota rewrite: You can ignore Trash like with v1.0, but you can also give a separate quota rule giving Trash mailbox somewhat more quota (but not unlimited).

To make sure users don't start keeping messages permanently in Trash you can use a nightly cronjob or expire plugin (v1.1) to expunge old messages from Trash mailbox.

None: Quota (last edited 2017-10-16 06:16:41 by 2001:2060:49:110:d1bb:904:e0dd:e41)