I enabled the trash plugin yesterday, adding "trash" to mail_plugins, and configuring the plugin setting "trash = /etc/dovecot/dovecot-trash.conf.ext".
But I still see users with lots of files in INBOX.Trash getting bounced because of quota exceeded:
postfix/lmtp[26273]:: C89F490061: to=XXXXXXXXXXXXX@example.no, relay=loadbalancers.example.net[192.168.42.15]:24, delay=1.2, delays=0.61/0.02/0/0.54, dsn=5.2.2, status=bounced (host loadbalancers.example.net[192.168.42.15] said: 552 5.2.2 XXXXXXXXXXXXd@example.no Quota exceeded (mailbox for user is full) (in reply to end of DATA command))
dovecot:: lmtp(19730, XXXXXXX@example.no): Error: BErxFCyrf1ASTQAAWNPRnw: sieve: msgid=e33d481dc9d9442fa79f55e45a516c82@BizWizard: failed to store into mailbox 'INBOX': Quota exceeded (mailbox for user is full)
$ sudo doveadm quota get -u XXXXXXXX@example.no Quota name Type Value Limit % UserQuota STORAGE 1048559 1048576 99 UserQuota MESSAGE 4487 - 0
Postfix if delivering via LMTP trough dovecot director.
Anybody see anything obvious in my config:
# 2.0.14: /etc/dovecot/dovecot.conf # OS: Linux 2.6.18-194.26.1.el5 x86_64 Red Hat Enterprise Linux Server release 5.5 (Tikanga) auth_cache_size = 100 M auth_verbose = yes auth_verbose_passwords = sha1 disable_plaintext_auth = no login_trusted_networks = 192.168.0.0/16 109.247.114.192/27 mail_gid = 3000 mail_home = /srv/mailstore/%256LRHu/%Ld/%Ln mail_location = maildir:~/:INDEX=/indexes/%1u/%1.1u/%u mail_max_userip_connections = 20 c = quota zlib trash mail_uid = 3000 maildir_stat_dirs = yes maildir_very_dirty_syncs = yes managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date mmap_disable = yes namespace { inbox = yes location = prefix = INBOX. separator = . type = private } passdb { args = /etc/dovecot/dovecot-ldap.conf.ext driver = ldap } plugin { quota = dict:UserQuota::file:%h/dovecot-quota sieve = /sieve/%1Lu/%1.1Lu/%Lu/.dovecot.sieve sieve_before = /etc/dovecot/sieve/dovecot.sieve sieve_dir = /sieve/%1Lu/%1.1Lu/%Lu sieve_max_script_size = 1M trash = /etc/dovecot/dovecot-trash.conf.ext zlib_save = gz zlib_save_level = 6 } postmaster_address = postmaster@example.net protocols = imap pop3 lmtp sieve service auth-worker { user = $default_internal_user } service auth { client_limit = 4521 unix_listener auth-userdb { group = mode = 0600 user = atmail } } service imap-login { inet_listener imap { address = * port = 143 } process_min_avail = 4 service_count = 0 vsz_limit = 1 G } service imap-postlogin { executable = script-login /usr/local/sbin/imap-postlogin.sh } service imap { executable = imap imap-postlogin process_limit = 2048 } service lmtp { client_limit = 1 inet_listener lmtp { address = * port = 24 } process_limit = 25 process_min_avail = 10 } service managesieve-login { inet_listener sieve { address = * port = 4190 } service_count = 1 } service pop3-login { inet_listener pop3 { address = * port = 110 } process_min_avail = 4 service_count = 0 vsz_limit = 1 G } service pop3-postlogin { executable = script-login /usr/local/sbin/pop3-postlogin.sh } service pop3 { executable = pop3 pop3-postlogin process_limit = 2048 } ssl = no userdb { args = /etc/dovecot/dovecot-ldap.conf.ext driver = ldap } protocol lmtp { mail_plugins = quota zlib trash sieve } protocol imap { imap_client_workarounds = delay-newmail mail_plugins = quota zlib trash imap_quota } protocol pop3 { mail_plugins = quota zlib trash pop3_client_workarounds = outlook-no-nuls oe-ns-eoh pop3_uidl_format = UID%u-%v } protocol sieve { managesieve_logout_format = bytes=%i/%o }
and my trash config:
$ cat /etc/dovecot/dovecot-trash.conf.ext # Spam mailbox is emptied before Trash 1 INBOX.Spam # Trash mailbox is emptied before Sent 2 INBOX.Trash
Global sieve script:
$ cat /etc/dovecot/sieve/dovecot.sieve
require ["comparator-i;ascii-numeric","relational","fileinto","mailbox"]; if allof ( not header :matches "x-spam-score" "-*", header :value "ge" :comparator "i;ascii-numeric" "x-spam-score" "10" ) { discard; stop; } elsif allof ( not header :matches "x-spam-score" "-*", header :value "ge" :comparator "i;ascii-numeric" "x-spam-score" "6" ) { fileinto :create "INBOX.Spam"; }
-jf