Hi,
I am still struggling with this, and would appreciate any help ayone can give. Let me try to explain step for step.
I created a test account test@company.com:
root@dovecot:/# doveadm quota get -u test Quota name Type Value Limit % STORAGE 1209 1368 88 MESSAGE 35 - 0
As you can see, the test mailbox is 88% full, so it should receive warnings, because in dovecot.conf I have set:
plugin { quota = maildir quota_rule = ?:storage=5G quota_rule2 = Trash:storage=+100M quota_warning = storage=97%% quota-warning 97 %u quota_warning2 = storage=95%% quota-warning 95 %u quota_warning3 = storage=90%% quota-warning 90 %u quota_warning4 = storage=85%% quota-warning 85 %u quota_warning5 = storage=80%% quota-warning 80 %u quota_warning6 = -storage=100%% quota-warning below %u }
We use a script to send out the email warnings, configured like this:
service quota-warning { executable = script /usr/local/bin/quota-warning.sh unix_listener quota-warning { user = vmail mode = 0666 } user = vmail }
When running this script manually as vmail, the warning is delivered to the test user:
sudo -H -u vmail bash -c '/usr/local/bin/quota-warning.sh 90 test'
However, in practice: dovecot never sends out any quota-warnings. It just starts generating delivery failures when the mailbox is over 100%.
We define the per-user quota in the first line of each user's maildirsize file, for the test user: /var/vmail/test/Maildir/maildirsize
Here is a debug=yes log file of 88% full incoming mailbox delivery:
Dec 15 13:56:07 mail dovecot: lda(test@company.com)<20290><>: Debug: Loading modules from directory: /usr/lib/dovecot/modules Dec 15 13:56:07 mail dovecot: lda(test@company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib01_acl_plugin.so Dec 15 13:56:07 mail dovecot: lda(test@company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib02_lazy_expunge_plugin.so Dec 15 13:56:07 mail dovecot: lda(test@company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so Dec 15 13:56:07 mail dovecot: lda(test@company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib15_notify_plugin.so Dec 15 13:56:07 mail dovecot: lda(test@company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib20_mail_log_plugin.so Dec 15 13:56:07 mail dovecot: lda(test@company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib20_zlib_plugin.so Dec 15 13:56:07 mail dovecot: lda(test@company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib90_sieve_plugin.so Dec 15 13:56:07 mail dovecot: lda(test@company.com)<20290><>: Debug: auth USER input: test uid=5000 gid=5000 home=/var/vmail/test Dec 15 13:56:07 mail dovecot: auth: Debug: master in: USER#0111#011test@company.com#011service=lda Dec 15 13:56:07 mail dovecot: auth: Debug: userdb out: USER#0111#011test#011uid=5000#011gid=5000#011home=/var/vmail/test Dec 15 13:56:07 mail dovecot: lda(test@company.com)<20290><>: Debug: changed username to test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Effective uid=5000, gid=5000, home=/var/vmail/test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: lazy_expunge: No lazy_expunge setting - plugin disabled Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota root: name= backend=maildir args= Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota rule: root= mailbox=? bytes=5368709120 messages=0 Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota rule: root= mailbox=Trash bytes=+104857600 messages=0 Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=5207647846 (97%) messages=0 reverse=no command=quota-warning 97 test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=5100273664 (95%) messages=0 reverse=no command=quota-warning 95 test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=4831838208 (90%) messages=0 reverse=no command=quota-warning 90 test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=4563402752 (85%) messages=0 reverse=no command=quota-warning 85 test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=4294967296 (80%) messages=0 reverse=no command=quota-warning 80 test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=5368709120 (100%) messages=0 reverse=yes command=quota-warning below test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota grace: root= bytes=536870912 (10%) Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Namespace : type=shared, prefix=shared/%n/, sep=/, inbox=no, hidden=no, list=children, subscriptions=no location=maildir:/var/vmail/%u/Maildir:LAYOUT=fs:DIRNAME=mAildir:INDEX=/var/vmail/test/shared/%u Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: shared: root=/var/run/dovecot, index=, indexpvt=, control=, inbox=, alt= Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: acl: initializing backend with data: vfile Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: acl: acl username = test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: acl: owner = 0 Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: acl vfile: Global ACLs disabled Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Namespace inbox: type=private, prefix=, sep=/, inbox=yes, hidden=no, list=yes, subscriptions=yes location=maildir:/var/vmail/test/Maildir:LAYOUT=fs:DIRNAME=mAildir Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: fs: root=/var/vmail/test/Maildir, index=, indexpvt=, control=, inbox=, alt= Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: acl: initializing backend with data: vfile Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: acl: acl username = test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: acl: owner = 1 Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: acl vfile: Global ACLs disabled Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: quota: quota_over_flag check: quota_over_script unset - skipping Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota root: name= backend=maildir args= Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota rule: root= mailbox=? bytes=5368709120 messages=0 Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota rule: root= mailbox=Trash bytes=+104857600 messages=0 Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=5207647846 (97%) messages=0 reverse=no command=quota-warning 97 raw mail user Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=5100273664 (95%) messages=0 reverse=no command=quota-warning 95 raw mail user Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=4831838208 (90%) messages=0 reverse=no command=quota-warning 90 raw mail user Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=4563402752 (85%) messages=0 reverse=no command=quota-warning 85 raw mail user Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=4294967296 (80%) messages=0 reverse=no command=quota-warning 80 raw mail user Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota warning: bytes=5368709120 (100%) messages=0 reverse=yes command=quota-warning below raw mail user Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota grace: root= bytes=536870912 (10%) Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: quota: quota_over_flag check: quota_over_script unset - skipping Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Destination address: test@company.com (source: -a parameter) Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: Pigeonhole version 0.5.4 () initializing Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: include: sieve_global is not set; it is currently not possible to include
:global' scripts. Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: file storage: Using active Sieve script path: /var/vmail/test/.dovecot.sieve Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: file storage: Using script storage path: /var/vmail/test/sieve Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: file storage: Relative path to sieve storage in active link: sieve/ Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: file storage: Using Sieve script path: /var/vmail/test/.dovecot.sieve Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: file storage: Storage path
/var/vmail/test/.dovecot.sieve' not found Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: file storage: Using Sieve script path: /var/lib/dovecot/default.sieve Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: file script: Opened scriptdefault' from
/var/lib/dovecot/default.sieve' Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: Using the following location for user's Sieve script: /var/lib/dovecot/default.sieve Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: Opening script 1 of 1 from/var/lib/dovecot/default.sieve' Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: Loading script /var/lib/dovecot/default.sieve Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: Script binary /var/lib/dovecot/default.svbin successfully loaded Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: binary save: not saving binary /var/lib/dovecot/default.svbin, because it is already stored Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: sieve: Executing script from
/var/lib/dovecot/default.svbin' Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Mailbox INBOX: Mailbox opened because: lib-lda delivery Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Quota root : Recalculated relative rules with bytes=1400000 count=0. Now grace=140000 Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: Debug: Mailbox INBOX: saving UID 0: Opened mail because: mail stream Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: save: box=INBOX, uid=20, msgid=46e7b334-80a0-3a99-4494-bc6fd07aa3db@external.com, from=user name user@external.com, subject=test Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: sieve: user@external.com | test | msgid=46e7b334-80a0-3a99-4494-bc6fd07aa3db@external.com: stored mail into mailbox 'INBOX' Dec 15 13:56:07 mail postfix/pipe[20088]: 76722819170D6: to=test@company.com, relay=dovecot, delay=0.24, delays=0.2/0.02/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service) Dec 15 13:56:07 mail postfix/qmgr[19577]: 76722819170D6: removed
I would appreciate any help. :-)
Finally, our dovecont -n running-config:
root@dovecot:# dovecot -n # 2.3.4.1 (f79e8e7e4): /etc/dovecot/dovecot.conf # Pigeonhole version 0.5.4 () # OS: Linux 4.19.0-17-amd64 x86_64 Debian 10.11 xfs # Hostname: mail.company.com auth_debug = yes auth_failure_delay = 10 secs auth_master_user_separator = * auth_mechanisms = plain login auth_username_format = %Ln auth_verbose = yes auth_verbose_passwords = sha1 default_vsz_limit = 512 M deliver_log_format = %f | %s | msgid=%m: %$ lda_mailbox_autocreate = yes lda_mailbox_autosubscribe = yes login_greeting = Dovecot ready. login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c lport=%a mail_gid = vmail mail_location = maildir:/var/vmail/%Ln/Maildir:LAYOUT=fs:DIRNAME=mAildir mail_plugins = acl lazy_expunge zlib quota mail_log notify mail_shared_explicit_inbox = yes mail_uid = vmail 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 ihave namespace { list = children location = maildir:/var/vmail/%%u/Maildir:LAYOUT=fs:DIRNAME=mAildir:INDEX=/var/vmail/%u/shared/%%u prefix = shared/%%n/ separator = / subscriptions = no type = shared } namespace inbox { inbox = yes location = mailbox "Deleted items" { special_use = \Trash } mailbox Drafts { special_use = \Drafts } mailbox Junk { special_use = \Junk } mailbox Sent { special_use = \Sent } mailbox "Sent items" { special_use = \Sent } mailbox Trash { special_use = \Trash } mailbox inbox { auto = subscribe } prefix = separator = / type = private } passdb { args = /etc/dovecot/deny.imap deny = yes driver = passwd-file } passdb { args = /etc/dovecot/master-users driver = passwd-file master = yes } passdb { args = /etc/dovecot/dovecot-ldap.conf.ext driver = ldap result_failure = return-fail } plugin { acl = vfile acl_shared_dict = file:/var/lib/dovecot/db/shared-mailboxes.db mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename append mail_log_fields = uid box msgid from subject quota = maildir quota_rule = ?:storage=5G quota_rule2 = Trash:storage=+100M quota_warning = storage=97%% quota-warning 97 %u quota_warning2 = storage=95%% quota-warning 95 %u quota_warning3 = storage=90%% quota-warning 90 %u quota_warning4 = storage=85%% quota-warning 85 %u quota_warning5 = storage=80%% quota-warning 80 %u quota_warning6 = -storage=100%% quota-warning below %u sieve = ~/.dovecot.sieve sieve_default = /var/lib/dovecot/default.sieve sieve_dir = ~/sieve } protocols = imap lmtp sieve service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 } unix_listener auth-userdb { group = vmail mode = 0666 user = vmail } } service imap-login { process_limit = 500 process_min_avail = 2 } service quota-warning { executable = script /usr/local/bin/quota-warning.sh unix_listener quota-warning { mode = 0666 user = vmail } user = vmail } service stats { unix_listener stats-reader { group = vmail mode = 0666 user = vmail } unix_listener stats-writer { group = vmail mode = 0666 user = vmail } } shutdown_clients = no ssl = required ssl_cert =
Thanks very much for your help!
MJ