Hi Aki Thanks for reviewing my config conversion. About relative paths, I meant this section in the docs:
Authentication > Virtual Users > Home Directories https://doc.dovecot.org/2.4.2/core/config/auth/users/virtual.html#home-directories > ## Home Directories > (...) > Home directory must be an absolute path, don't even try to use relative > paths, these do not work. So, I was not sure if `~/sdbox` is considered a relative or an absolute path, depending on the correct user home, which I was unsure about (could be root or vmail system user, as I'm not sure at what point the config is read in Dovecot startup). Using `mail_path = %{home}/sdbox` feels safer, as it is not 100% clear from the docs. Maybe you can clear this confusion in the docs. Oh, here we go: https://doc.dovecot.org/2.4.2/core/settings/variables.html#mail-user-variables > Variable `home`: home directory. Use of `~/` is better whenever possible. Cheers, Philip > On 5 Feb 2026, at 06:22, Aki Tuomi via dovecot <[email protected]> wrote: > > > Hi, > > double slashes are usually harmless. ~/sdbox is also ok, not sure what > section of the docs you are referring to about relative paths. The conversion > also looks ok. > > Aki > >> On 04/02/2026 00:16 EET Philip Iezzi via dovecot <[email protected]> wrote: >> >> >> Hi Aki >> >> I really appreciate that overview. I'm going to migrate my mail servers soon >> from Dovecot 2.3 to 2.4 and finally upgrade them to Debian Trixie. >> I'm still a bit confused about mail_home. Is that conversion correct? >> >> <= 2.3 >> mail_home = /var/vmail/%d/%n >> mail_location = sdbox:~/sdbox >> mail_uid = vmail >> mail_gid = vmail >> >> => 2.4 >> mail_driver = sdbox >> mail_home = /var/vmail/%{user | domain}/%{user | username} >> mail_path = %{home}/sdbox >> mail_uid = vmail >> mail_gid = vmail >> >> I'm asking because I have an environment with mixed usernames, legacy >> usernames without domain (e.g. web123p1) vs. regular email usernames (e.g. >> [email protected]). >> With above 2.4 mail_home config, would POSIX path normalisation care about >> the // on legacy usernames? >> It should match my existing structure (running for over 6yrs on Dovecot): >> >> web123p1 -> /var/vmail/web123p1 >> [email protected] -> /var/vmail/example.com/foo >> >> So, I would not need to care about the resulting double slash >> (/var/vmail//web123p1) because of the missing domain in web123p1? >> >> I also depend on auto-creation of mailbox directory structure when a new >> virtual user is accessed the first time (authenticated via MySQL passdb). >> Will that magically just work with above config, without enabling any extra >> "auto-create" flag? >> >> Somewhere in your docs, I read about relative paths not being >> "future-proof". Can those two be equally used und ~ is not considered >> "relative"? >> >> mail_path = %{home}/sdbox >> vs. >> mail_path = ~/sdbox >> >> (will probably never ever change the home of vmail system user, but who >> guarantees that this config is really read by vmail and not root?) >> >> Thanks a lot. >> Cheers, >> Philip >> >> >> >>> On 10 Dec 2025, at 13:10, Aki Tuomi via dovecot <[email protected]> wrote: >>> >>> Hi! >>> >>> We've been noticing that many people are configuring mail_inbox_path. >>> >>> I assume that for most people this is because debian decided to include it >>> in their default config, so that it would use /var/mail boxes for user >>> INBOXes. >>> >>> If your inbox *does not* reside in some weird location, you should *not* >>> set this setting to any value, instead you can either ensure it's commented >>> out, or set to empty value. IN PARTICULAR, IT IS **NOT** REQUIRED SETTING. >>> >>> Setting it to some random weird value like '.' will just cause Problems, >>> setting it to $MAIL_HOME/ or something else will just be either pointless >>> or cause problems. >>> >>> Some most common conversions (please adjust to your environment) >>> >>> mail_home= /home/vmail/%u >>> => >>> mail_home = /home/vmail/%{user} >>> >>> mail_home = /home/vmail/%d/%u >>> => >>> mail_home = /home/vmail/%{user|domain}/%{user|username} >>> or some variant of this. >>> >>> mail_location = maildir:~/ >>> => >>> mail_path = ~/ >>> mail_driver = maildir >>> >>> mail_location = maildir:/var/srv/foo/%d/%u >>> => >>> mail_path = /var/srv/foo/%{user|domain}/%{user|username} >>> mail_driver = maildir >>> >>> In addition you might want to convert >>> >>> INDEX=~/.index >>> => >>> mail_index_path=~/.index >>> >>> CONTROL=~/.control >>> => >>> mail_control_path=~/.control >>> >>> LAYOUT=fs >>> => >>> mailbox_list_layout=fs >>> >>> A minimal working config is >>> >>> mail_home=/home/vmail/%{user} >>> mail_driver=maildir >>> mail_path=~/maildir >>> mail_uid=vmail >>> mail_gid=vmail >>> >>> ## >>> >>> If you have settings like >>> >>> namespace other { >>> location = maildir:/foo/bar >>> } >>> >>> this converts into >>> >>> namespace other { >>> mail_path = /foo/bar >>> # optional, if this is matches your top level >>> mail_driver = maildir >>> } >>> >>> Hope this clears out some of the confusion. >>> >>> Aki >>> >>> _______________________________________________ >>> 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] > > _______________________________________________ > 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]
