Hello,

I've recently upgraded to debian 13 (trixie), from debian 12 (bookworm).
In bookworm I had the following setup working like perfection:
- All mail is sorted to some mailbox folder through sieve (either a 
"specialized" one, or a generic folder under the inbox name like year.month - 
2025.08). 
- No email whatsoever was ever reaching the inbox.
- Then I had a virtual inbox which would get me all the "unread" or "flagged" 
messages

This way I had all my email sorted out from the delivery and my inbox cleared 
itself once I had read an email.

For this I was using the stock debian dovecot packages, and now, after the 
upgrade to debian 13 I'm also using the stock debian packages.

However, this whole neat setup broke and I can't get it to work again. I've 
searched dovecot's manual, asked two different AIs, did a number of web 
searches and adapted the new configuration files to the new syntax but dovecot 
refuses to list the emails in my INBOX folder. I've spent already several hours 
around this, to no avail. Unfortunately I didn't keep a copy of the config 
files from debian 12 so now I can't really compare but I did manually change 
the dovecot config files after the upgrade so that what I had running in debian 
12 should work as before (it was refusing to start after the upgrade).

Here is the output of dovecot -n
# 2.4.1-4 (7d8c0e5759): /etc/dovecot/dovecot.conf
# Pigeonhole version 2.4.1-4 (0a86619f)
# OS: Linux 6.12.41+deb13-amd64 x86_64 Debian 13.0
# Hostname: myhost
# 4 default setting changes since version 2.4.0
dovecot_config_version = 2.4.0
auth_mechanisms = plain login
dovecot_storage_version = 2.4.0
fts_autoindex = yes
fts_autoindex_max_recent_msgs = 999
fts_search_add_missing = yes
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
mail_driver = maildir
mail_inbox_path = ~/Maildir
mail_path = ~/Maildir
mail_plugins {
  notify = yes
  mail_log = yes
  virtual = yes
}
mail_privileged_group = mail
namespace_subscriptions = no
protocols {
  imap = yes
  sieve = yes
}
passdb pam {
}
userdb passwd {
}
namespace inbox {
  inbox = yes
  prefix =
  separator = .
  subscriptions = yes
  mailbox Drafts {
    special_use = "\\Drafts"
  }
  mailbox Junk {
    special_use = "\\Junk"
  }
  mailbox Trash {
    special_use = "\\Trash"
  }
  mailbox Sent {
    special_use = "\\Sent"
  }
  mailbox "Sent Messages" {
    special_use = "\\Sent"
  }
}
service imap-login {
  inet_listener imap {
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
  }
  inet_listener pop3s {
  }
}
service submission-login {
  inet_listener submission {
    port = 587
  }
  inet_listener submissions {
  }
}
service lmtp {
  unix_listener lmtp {
  }
}
service imap {
  executable = imap imap-postlogin
}
service pop3 {
}
service submission {
}
service auth {
  unix_listener auth-userdb {
  }
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
}
service auth-worker {
}
service dict {
  unix_listener dict {
  }
}
ssl_server {
  cert_file = /etc/dovecot/private/dovecot.pem
  dh_file = /usr/share/dovecot/dh.pem
  key_file = /etc/dovecot/private/dovecot.key
}
protocol lda {
  mail_plugins {
    sieve = yes
  }
}
protocol imap {
  mail_max_userip_connections = 40
}
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
}
namespace 00-virtual {
  mail_driver = virtual
  mail_path = ~/Maildir/virtual
  hidden = no
  inbox = no
  list = yes
  prefix = 00-virtual.
  separator = .
}
namespace virtual {
  mail_driver = virtual
  mail_path = ~/Maildir/virtual
  hidden = no
  inbox = no
  list = yes
  prefix = virtual.
  separator = .
}
namespace real {
  hidden = yes
  inbox = no
  list = no
  prefix = real.
  separator = .
  subscriptions = no
}
service imap-postlogin {
  executable = script-login /usr/local/bin/dovecot-postlogin.sh
  unix_listener imap-postlogin {
  }
}
passdb deny {
  deny = yes
  driver = passwd-file
  passwd_file_path = /etc/dovecot/deny-users
}

This is /usr/local/bin/dovecot-postlogin.sh
#!/bin/sh
VIRTUAL=$HOME/Maildir/virtual
# AUTOMATICALLY VIRTUALIZE INBOX
#
# If the user creates a virtual/INBOX/dovecot-virtual,
# switch the inbox to the virtual namespace.
if [ -d "${VIRTUAL}/INBOX" ]; then
    export USERDB_KEYS="$USERDB_KEYS NAMESPACE/VIRTUAL/INBOX 
NAMESPACE/INBOX/INBOX"
    logger -p mail.debug "$USERDB_KEYS $VIRTUAL $@"
    /usr/bin/env USERDB_KEYS="$USERDB_KEYS" NAMESPACE/VIRTUAL/INBOX=yes 
NAMESPACE/INBOX/INBOX=no "$@"
else
  exec "$@"
fi

This is the content of $HOME/Maildir/virtual/INBOX/dovecot-virtual
real.*
  OR UNSEEN FLAGGED

I'm also getting this message anytime that I login with a mail client:
2025-08-22T21:52:29.466584+01:00 ****** dovecot: 
imap(***)<316863><svBRYvo8+pXAqFoB>: Error: Mailbox INBOX: Failed to autocreate 
mailbox: Can't create virtual mailboxes

Note that the 00-virtual namespace was added just as a temporary check and I 
want to delete it once this is working again.

I have also a file under $HOME/Maildir/virtual/Flagged/dovecot-virtual with the 
exact same contents as the INBOX one above which get's me a virtual folder that 
works correctly (getting all my unread and flagged email in a single folder), 
so the filter works. Just changing the INBOX from the real to the virtual one 
fails and I can't understand what am I doing wrong or what am I missing.

Can someone please help me? I'm completely lost and frustrated on this. 

Thank you very much.
_______________________________________________
dovecot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to