quota warnings not sent out anymore

mj lists at merit.unu.edu
Wed Dec 15 13:06:39 UTC 2021


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 at company.com:

> root at 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 at company.com)<20290><>: Debug: Loading modules from directory: /usr/lib/dovecot/modules
> Dec 15 13:56:07 mail dovecot: lda(test at company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib01_acl_plugin.so
> Dec 15 13:56:07 mail dovecot: lda(test at company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib02_lazy_expunge_plugin.so
> Dec 15 13:56:07 mail dovecot: lda(test at company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so
> Dec 15 13:56:07 mail dovecot: lda(test at company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib15_notify_plugin.so
> Dec 15 13:56:07 mail dovecot: lda(test at company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib20_mail_log_plugin.so
> Dec 15 13:56:07 mail dovecot: lda(test at company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib20_zlib_plugin.so
> Dec 15 13:56:07 mail dovecot: lda(test at company.com)<20290><>: Debug: Module loaded: /usr/lib/dovecot/modules/lib90_sieve_plugin.so
> Dec 15 13:56:07 mail dovecot: lda(test at 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 at 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 at 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 at 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 script `default' 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 at external.com>, from=user name <user at external.com>, subject=test
> Dec 15 13:56:07 mail dovecot: lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: sieve: user at external.com | test | msgid=<46e7b334-80a0-3a99-4494-bc6fd07aa3db at external.com>: stored mail into mailbox 'INBOX'
> Dec 15 13:56:07 mail postfix/pipe[20088]: 76722819170D6: to=<test at 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 at 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 = </etc/ssl/letsencrypt/fullchain.pem
> ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
> ssl_dh = # hidden, use -P to show it
> ssl_key = # hidden, use -P to show it
> ssl_min_protocol = TLSv1.2
> userdb {
>   args = uid=vmail gid=vmail home=/var/vmail/%n allow_all_users=yes
>   driver = static
> }
> userdb {
>   args = /etc/dovecot/dovecot-ldap.conf.ext
>   driver = ldap
> }
> verbose_proctitle = yes
> protocol lda {
>   mail_plugins = acl lazy_expunge zlib quota mail_log notify sieve quota
> }
> protocol imap {
>   imap_max_line_length = 2 M
>   mail_max_userip_connections = 40
>   mail_plugins = acl lazy_expunge zlib quota mail_log notify imap_quota imap_acl
> }

Thanks very much for your help!

MJ


More information about the dovecot mailing list