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 t...@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(t...@company.com)<20290><>: Debug:
Loading modules from directory: /usr/lib/dovecot/modules
Dec 15 13:56:07 mail dovecot: lda(t...@company.com)<20290><>: Debug:
Module loaded: /usr/lib/dovecot/modules/lib01_acl_plugin.so
Dec 15 13:56:07 mail dovecot: lda(t...@company.com)<20290><>: Debug:
Module loaded: /usr/lib/dovecot/modules/lib02_lazy_expunge_plugin.so
Dec 15 13:56:07 mail dovecot: lda(t...@company.com)<20290><>: Debug:
Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so
Dec 15 13:56:07 mail dovecot: lda(t...@company.com)<20290><>: Debug:
Module loaded: /usr/lib/dovecot/modules/lib15_notify_plugin.so
Dec 15 13:56:07 mail dovecot: lda(t...@company.com)<20290><>: Debug:
Module loaded: /usr/lib/dovecot/modules/lib20_mail_log_plugin.so
Dec 15 13:56:07 mail dovecot: lda(t...@company.com)<20290><>: Debug:
Module loaded: /usr/lib/dovecot/modules/lib20_zlib_plugin.so
Dec 15 13:56:07 mail dovecot: lda(t...@company.com)<20290><>: Debug:
Module loaded: /usr/lib/dovecot/modules/lib90_sieve_plugin.so
Dec 15 13:56:07 mail dovecot: lda(t...@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#011t...@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(t...@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:
<t...@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-bc6fd07aa...@external.com>, from=user
name <u...@external.com>, subject=test
Dec 15 13:56:07 mail dovecot:
lda(test)<20290><cqPGJOfluWFCTwAA4uZ9mg>: sieve: u...@external.com |
test | msgid=<46e7b334-80a0-3a99-4494-bc6fd07aa...@external.com>:
stored mail into mailbox 'INBOX'
Dec 15 13:56:07 mail postfix/pipe[20088]: 76722819170D6:
to=<t...@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 = </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