Hi ByteMe,
Try changing the separator from / to .
Best regards, Piotr Szafarczyk
On 04/12/2025 11:50, byteme--- via dovecot wrote:
My configuration on new system:
2.4.1-4 (7d8c0e5759): /etc/dovecot/dovecot.conf
Pigeonhole version 2.4.1-4 (0a86619f)
OS: Linux 6.12.57+deb13-amd64 x86_64 Debian 13.2 ext4
dovecot_config_version = 2.4.1 acl_driver = vfile auth_allow_weak_schemes = yes auth_debug = yes auth_debug_passwords = yes auth_username_format = %{user|lower} auth_verbose = yes doveadm_password = # hidden, use -P to show it doveadm_port = 12345 dovecot_storage_version = 2.4.1 fts_autoindex = yes fts_autoindex_max_recent_msgs = 999 fts_search_add_missing = yes info_log_path = /var/log/dovecot/dovecot-info.log listen = * log_path = /var/log/dovecot/dovecot.log log_timestamp = "%Y-%m-%d %H:%M:%S " login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c %k mail_debug = yes mail_driver = maildir mail_home = /var/vmail/%{user | domain}/%{user | username } mail_inbox_path = . mail_max_userip_connections = 500 mail_path = /var/vmail/%{user | domain}/%{user | username }/ mail_plugins = notify quota push_notification quota_clone acl fts fts_solr mail_privileged_group = mail protocols { imap = yes sieve = yes lmtp = yes pop3 = yes } quota_exceeded_message = Benutzer %{user} hat das Speichervolumen ueberschritten. / User %{user} has exhausted allowed storage space. sieve_global_extensions { vnd.dovecot.pipe = yes } sieve_max_redirects = 10 sieve_max_script_size = 1M sieve_plugins { sieve_imapsieve = yes sieve_extprograms = yes } sql_driver = mysql 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:DHE-RSA-CHACHA20-POLY1305 verbose_proctitle = yes mysql /var/run/mysqld/mysqld.sock { dbname = postfix password = # hidden, use -P to show it user = postfix } passdb sql { query = SELECT username AS user, CONCAT('{CRYPT}', password) AS password FROM mailbox WHERE username = '%{user}' AND active = true; } userdb sql { iterate_query = SELECT username AS user FROM mailbox WHERE active = true; query = SELECT 5000 AS uid, 5000 AS gid, CONCAT('/var/vmail/', SUBSTRING_INDEX(username,'@',-1), '/', SUBSTRING_INDEX(username,'@',1)) AS home, CONCAT('maildir:/var/vmail/', SUBSTRING_INDEX(username,'@',-1), '/', SUBSTRING_INDEX(username,'@',1)) AS mail, CONCAT(quota,'M') AS quota_storage_size FROM mailbox WHERE username = '%{user}' AND active = true; } namespace inbox { inbox = yes prefix = .INBOX. separator = / type = private mailbox Drafts { special_use = "\\Drafts" } mailbox Archive { } mailbox Junk { special_use = "\\Junk" } mailbox Sent { special_use = "\\Sent" } mailbox Trash { special_use = "\\Trash" quota_storage_extra = 100M quota_storage_percentage = 110 } mailbox "Sent Messages" { special_use = "\\Sent" } } namespace shared { list = yes prefix = Shared. separator = . subscriptions = yes type = shared } namespace public { list = yes prefix = Public. separator = . subscriptions = yes type = public mailbox Announcements { auto = subscribe } } service imap-login { inet_listener imap { } inet_listener imaps { } } service pop3-login { inet_listener pop3 { } inet_listener pop3s { } } service submission-login { inet_listener submission { } } service imap { executable = imap process_limit = 1024 process_min_avail = 2 vsz_limit = 1G } service pop3 { } service submission { } service auth { user = root unix_listener /var/spool/postfix/private/auth_dovecot { group = postfix mode = 0660 user = postfix } unix_listener auth-master { mode = 0600 user = vmail } unix_listener auth-userdb { mode = 0600 user = vmail } } service auth-worker { } service dict { unix_listener dict { group = vmail mode = 0660 user = vmail } } ssl_server { cert_file = /etc/letsencrypt/live/mx1.germany.com/fullchain.pem key_file = /etc/letsencrypt/live/mx1.germany.com/privkey.pem } service doveadm { inet_listener doveadm_listener { port = 12345 } } protocol imap { imap_idle_notify_interval = 29 mins mail_max_userip_connections = 50 mail_plugins = quota quota_clone imap_quota imap_acl acl fts fts_solr } protocol lmtp { auth_socket_path = /var/run/dovecot/auth-master mail_plugins { sieve = yes notify = yes push_notification = yes } postmaster_address = postmaster@germany.com } service managesieve-login { process_min_avail = 2 vsz_limit = 128 M inet_listener sieve { port = 4190 } inet_listener sieve_deprecated { port = 2000 } } service managesieve { process_limit = 256 } protocol sieve { managesieve_logout_format = bytes=%i/%o 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 index ihave duplicate mime foreverypart extracttext } dict_server { dict mysql { driver = sql sql_driver = mysql dict_map priv/quota/messages { sql_table = quota username_field = username dict_map_value_field messages { } } dict_map priv/quota/storage { sql_table = quota username_field = username dict_map_value_field bytes { } } } } acl_sharing_map { dict file { path = /var/vmail/shared-mailboxes.db } } quota "User quota" { driver = count storage_size = 1G } quota_clone { dict proxy { name = mysql } } sieve_script personal { active_path = /var/vmail/sieve/%{user | domain }/%{user | username }/active-script.sieve driver = file path = /var/vmail/sieve/%{user | domain }/%{user | username }/scripts type = personal } sieve_script global { driver = file path = /var/vmail/sieve/global.sieve type = before } sieve_script spam-global { path = /var/vmail/sieve/global/spam-global.sieve type = before } imapsieve_from Spam { sieve_script ham { cause = copy path = /var/vmail/sieve/global/learn-ham.sieve type = before } }
On the old system Bookworm an Dovecot 2.3 it looks like:
2.3.19.1 (9b53102964): /etc/dovecot/dovecot.conf
Pigeonhole version 0.5.19 (4eae2f79)
OS: Linux 6.1.0-40-amd64 x86_64 Debian 12.12
dict { sqlquota = mysql:/etc/dovecot/dovecot-dict-sql.conf } doveadm_password = # hidden, use -P to show it doveadm_port = 12345 info_log_path = /var/log/dovecot/dovecot-info.log listen = * log_path = /var/log/dovecot/dovecot.log log_timestamp = "%Y-%m-%d %H:%M:%S " login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c %k mail_home = /var/vmail/%d/%n mail_location = maildir:~/ mail_max_userip_connections = 500 mail_plugins = quota acl fts fts_solr mail_privileged_group = mail 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 index ihave duplicate mime foreverypart extracttext namespace { list = yes location = maildir:%%h/:INDEXPVT=~/Shared/%%u prefix = Shared/%%u/ separator = / subscriptions = no type = shared } namespace inbox { inbox = yes location = mailbox Archief { special_use = \Archive } mailbox Archiv { special_use = \Archive } mailbox Archive { auto = subscribe special_use = \Archive } mailbox Archives { special_use = \Archive } mailbox Arquivo { special_use = \Archive } mailbox Arquivos { special_use = \Archive } mailbox Brouillons { special_use = \Drafts } mailbox Concepten { special_use = \Drafts } mailbox Corbeille { special_use = \Trash } mailbox "Deleted Items" { special_use = \Trash } mailbox "Deleted Messages" { special_use = \Trash } mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Entwürfe { special_use = \Drafts } mailbox Enviados { special_use = \Sent } mailbox Envoyés { special_use = \Sent } mailbox "Gelöschte Objekte" { special_use = \Trash } mailbox Gesendet { special_use = \Sent } mailbox "Gesendete Objekte" { special_use = \Sent } mailbox "Itens Enviados" { special_use = \Sent } mailbox "Itens Excluídos" { special_use = \Trash } mailbox "Itens Excluidos" { special_use = \Trash } mailbox Junk { auto = subscribe special_use = \Junk } mailbox "Junk E-mail" { special_use = \Junk } mailbox Lixeira { special_use = \Trash } mailbox "Lixo Eletrônico" { special_use = \Junk } mailbox "Messages envoyés" { special_use = \Sent } mailbox "Ongewenste e-mail" { special_use = \Junk } mailbox Papierkorb { special_use = \Trash } mailbox Prullenbak { special_use = \Trash } mailbox Quarantine { auto = subscribe comment = Mail containing viruses } mailbox Rascunhos { special_use = \Drafts } mailbox Sent { auto = subscribe special_use = \Sent } mailbox "Sent Items" { special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Spam { special_use = \Junk } mailbox Trash { auto = subscribe special_use = \Trash } mailbox "Verwijderde items" { special_use = \Trash } mailbox Verzonden { special_use = \Sent } mailbox "Verzonden items" { special_use = \Sent } prefix = separator = / } passdb { driver = pam } passdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } plugin { acl = vfile acl_anyone = allow acl_shared_dict = file:/var/vmail/shared-mailboxes.db mail_replica = tcp:192.168.2.6 quota = dict:Userquota::proxy::sqlquota quota_rule2 = Trash:storage=+100%% recipient_delimiter = + sieve = /var/vmail/%d/%n/sieve/active-script.sieve sieve_before = /var/vmail/sieve/global.sieve sieve_dir = /var/vmail/%d/%n/sieve/scripts/ sieve_max_script_size = 1M sieve_quota_max_scripts = 0 sieve_quota_max_storage = 0 } protocols = imap sieve lmtp pop3 replication_dsync_parameters = -d -n INBOX -l 30 -U replication_full_sync_interval = 2 mins service aggregator { fifo_listener replication-notify-fifo { user = vmail } unix_listener replication-notify { user = vmail } } service auth { unix_listener /var/spool/postfix/private/auth_dovecot { group = postfix mode = 0660 user = postfix } unix_listener auth-master { mode = 0600 user = vmail } unix_listener auth-userdb { mode = 0600 user = vmail } user = root } service dict { unix_listener dict { group = vmail mode = 0660 user = vmail } } service doveadm { inet_listener { port = 12345 } } service imap { process_limit = 1024 vsz_limit = 1 G } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } user = vmail } service managesieve-login { inet_listener sieve { port = 4190 } process_min_avail = 2 service_count = 1 vsz_limit = 128 M } service managesieve { process_limit = 256 } service replicator { process_min_avail = 1 unix_listener replicator-doveadm { mode = 0600 user = vmail } } ssl_cert = </etc/letsencrypt/live/mx1.germany.com/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:DHE-RSA-CHACHA20-POLY1305 ssl_key = # hidden, use -P to show it userdb { driver = passwd } userdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } verbose_proctitle = yes protocol lmtp { auth_socket_path = /var/run/dovecot/auth-master mail_plugins = quota sieve acl fts fts_solr postmaster_address = postmaster@germany.com } protocol imap { mail_plugins = quota imap_quota imap_acl acl fts fts_solr } protocol sieve { managesieve_logout_format = bytes=%i/%o } remote 127.0.0.1 { disable_plaintext_auth = no }
dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-leave@dovecot.org