Hello List,
I've enabled the quota_mail_size parameter to match what I've set in Postfix, but it seems to me that this parameter has no effect.
Currently set to quota_mail_size = 104857600B (with or without the suffix does not matter in my case as both won't work), but connecting to the LMTP socket does not seem to advertise SIZE:
socat /run/dovecot/lmtp readline
220 mail-fra01 Hello there LHLO test 250-mail-fra01 250-8BITMIME 250-CHUNKING 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-SMTPUTF8 250 STARTTLS quit 221 2.0.0 Bye
Also looking at IMAP logs on clients, APPENDLIMIT also does not seem to get advertised there. Quota itself seems to work fine via userdb, also via the IMAP quota extension as my clients report the usage.
Thanks,
Marcel
doveconf -n:
2.4.2 (0962ed2104): /etc/dovecot/dovecot.conf
Pigeonhole version 2.4.2 (767418c3)
OS: Linux 6.17.11-hardened1-1-hardened x86_64
Hostname: mail-fra01
dovecot_config_version = 2.4.2
auth_verbose = yes
dovecot_storage_version = 2.4.2
first_valid_uid = 8
fts_autoindex = yes
hostname = mail-fra01
imap4rev2_enable = yes
last_valid_uid = 8
lmtp_rcpt_check_quota = yes
login_greeting = Hello there
mail_driver = maildir
mail_gid = mail
mail_home = /var/vmail/%{user | domain}/%{user | username}
mail_path = ~/
mail_plugins {
quota = yes
quota_clone = yes
notify = yes
virtual = yes
fts = yes
fts_xapian = yes
}
mail_server_admin = mailto:marcel@menzel.de
mail_server_comment = hi
mail_uid = mail
mail_utf8_extensions = yes
mailbox_list_storage_escape_char =
mailbox_list_utf8 = yes
passdb_default_password_scheme = SHA256-CRYPT
protocols {
imap = yes
pop3 = yes
sieve = yes
lmtp = yes
}
quota_mail_size = 104857600B
quota_status_nouser = DUNNO
sieve_global_extensions {
vnd.dovecot.pipe = yes
vnd.dovecot.environment = yes
}
sieve_pipe_bin_dir = /usr/lib/dovecot/sieve-pipe
sieve_plugins {
sieve_imapsieve = yes
sieve_extprograms = yes
}
sieve_redirect_envelope_from = recipient
sql_driver = pgsql
ssl = required
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
ssl_curve_list = X448:X25519:P-256
ssl_options = no_ticket
submission_host = 127.0.0.1:25
verbose_proctitle = yes
protocol imap {
imap_hibernate_timeout = 10 secs
imap_idle_notify_interval = 29 mins
imap_metadata = yes
mail_max_userip_connections = 50
mail_plugins {
imap_quota = yes
imap_sieve = yes
last_login = yes
}
}
protocol pop3 {
mail_plugins {
last_login = yes
}
}
protocol sieve {
mail_plugins {
last_login = yes
}
}
protocol lmtp {
mail_plugins {
sieve = yes
push_notification = yes
}
postmaster_address = postmaster@%{user | domain}
}
service lmtp {
user = mail
unix_listener /var/spool/postfix/private/dovecot-lmtp {
group = postfix
mode = 0660
user = postfix
}
}
service auth-worker {
user = $SET:default_internal_user
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
unix_listener auth-userdb {
group = dovecot
mode = 0660
user = mail
}
}
service quota-status {
client_limit = 1
executable = quota-status -p postfix
unix_listener /var/spool/postfix/private/quota-status {
group = postfix
mode = 0660
user = postfix
}
}
service indexer-worker {
vsz_limit = 8 G
}
maildir {
very_dirty_syncs = yes
}
mail_attribute {
dict file {
path = %{home}/dovecot-attributes
}
}
fts xapian {
}
language en {
default = yes
}
language de {
}
namespace inbox {
inbox = yes
separator = /
mailbox Archive {
auto = subscribe
special_use = "\\Archive"
}
mailbox Drafts {
auto = subscribe
special_use = "\\Drafts"
}
mailbox Junk {
fts_autoindex = no
auto = subscribe
autoexpunge = 30 days
special_use = "\\Junk"
}
mailbox Sent {
special_use = "\\Sent"
}
mailbox Trash {
fts_autoindex = no
auto = subscribe
autoexpunge = 120 days
special_use = "\\Trash"
quota_storage_extra = 100M
}
}
pgsql mcl {
parameters {
dbname = mail
host = 10.10.3.2
password = <redacted>
port = 6432
sslmode = disable
user = mail
}
}
userdb sql {
iterate_query = SELECT username AS user FROM mailbox;
query = SELECT CONCAT(quota, 'B') AS quota_storage_size FROM mailbox
WHERE username = '%{user | lower}' LIMIT 1;
}
passdb sql {
query = SELECT username AS user, password, allow_nets FROM mailbox
WHERE username = '%{user | lower}' AND active = true LIMIT 1;
}
ssl_server {
cert_file = /etc/ssl/private/dovecot.crt.pem
key_file = /etc/ssl/private/dovecot.pk.pem
prefer_ciphers = server
}
ssl_client {
ca_dir = /etc/ssl/certs
}
sieve_script default {
name = default
path = /var/vmail/global.sieve
type = default
}
sieve_script personal {
active_path = /var/vmail/%{user | domain}/%{user |
username}/dovecot.sieve
path = /var/vmail/%{user | domain}/%{user | username}/sieve
type = personal
}
mailbox Spam {
sieve_script spam {
cause = copy append
path = /usr/lib/dovecot/sieve-pipe/report-spam.sieve
type = before
}
}
imapsieve_from Spam {
sieve_script ham {
cause = copy append
path = /usr/lib/dovecot/sieve-pipe/report-ham.sieve
type = before
}
}
quota "User quota" {
}
quota_clone {
dict proxy {
name = quota_clone_sql
}
}
dict_server {
dict quota_clone_sql {
driver = sql
sql_driver = pgsql
dict_map priv/quota/messages {
sql_table = quota2
username_field = username
dict_map_value_field messages {
}
}
dict_map priv/quota/storage {
sql_table = quota2
username_field = username
dict_map_value_field bytes {
}
}
}
}