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/Dict|dict]]: Store quota in a dictionary (e.g. SQL). * [[Quota/Maildir|maildir]]: Maildir++ quota. This is the most commonly used quota for virtual users.

* [[Quota/Dict|dict]]: Store quota usage in a dictionary (e.g. SQL). * [[Quota/Maildir|maildir]]: Stora quota usage in Maildir++ maildirsize files. This is the most commonly used quota for virtual users.

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:

Quota and Trash mailbox

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:

COPY the message to Trash mailbox

Mark the message with \Deleted

Expunge the message from the original mailbox.

(Maybe later expunge the message from Trash when "clean trash" feature is used)

If user is over quota, 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.