This is implemented in main and is going to next release. See
   
[1]https://github.com/dovecot/core/compare/76d25284a25196ab36b78a1fe564cb6b5fc73aa8%5E...2c847a6af90be2441677f50179a20ce32ca5ca5e.patch

   Aki

     On 22/12/2025 22:25 EET Marcel Menzel via dovecot
     <[2][email protected]> wrote:


     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:[3][email protected]
     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 {
     }
     }
     }
     }

     _______________________________________________
     dovecot mailing list -- [4][email protected]
     To unsubscribe send an email to [5][email protected]

References

   Visible links
   1. 
https://github.com/dovecot/core/compare/76d25284a25196ab36b78a1fe564cb6b5fc73aa8%5E...2c847a6af90be2441677f50179a20ce32ca5ca5e
   2. mailto:[email protected]
   3. mailto:[email protected]
   4. mailto:[email protected]
   5. mailto:[email protected]
_______________________________________________
dovecot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to