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]