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 = [email protected]
}
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 = [email protected]
}
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 -- [email protected]
To unsubscribe send an email to [email protected]
_______________________________________________
dovecot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to