Dovecot Subfolder Always Uses dot separator with mdbox
I’m trying to configure dovecot to use mailbox subfolders that look like both foo/bar on the IMAP client and the filesystem.
But the subfolders created all look like foo.bar, not foo/bar with a proper nesting structure.
This also happens when the folder ‘bar’ is moved into the folder ‘foo’—A new folder `foo.bar’ is created.
I believe that i’m following the configuration rules at https://wiki.dovecot.org/MailboxFormat/Maildir#Maildir_and_filesystems and https://wiki.dovecot.org/MailLocation/Maildir. This issue happens whether I set separator to its default, ‘.’, or ‘/’:
mail_location = mdbox:/private/var/mail/tld.hostname.mail/%Ln/mdbox:LAYOUT=fs namespace inbox { … separator = / … }
The IMAP client is macOS Mail.app version 14.0.
I’d greatly appreciate any help or pointers to fix this configuration issue.
dovecot -n
# 2.3.13 (): /opt/local/etc/dovecot/dovecot.conf # Pigeonhole version 0.5.13 () # OS: Darwin 20.4.0 x86_64 apfs # Hostname: mail.hostname.tld aps_topic = com.apple.mail.XServer.ffffffff-ffff-fff-ffffffffff auth_cache_size = 10 M auth_gssapi_hostname = $ALL auth_krb5_keytab = /opt/local/etc/dovecot/imap.keytab auth_mechanisms = plain gssapi auth_realms =mail.hostname.tld auth_socket_path = /opt/local/var/run/dovecot/auth-userdb auth_username_format = %Ln debug_log_path = /opt/local/var/log/mail/mail-debug.log disable_plaintext_auth = no first_valid_gid = 6 first_valid_uid = 6 imap_id_log = * imap_id_send = "name" * "version" * imap_idle_notify_interval = 29 mins imap_urlauth_submit_user = submit info_log_path = /opt/local/var/log/mail/mail-info.log last_valid_gid = 100 lda_mailbox_autocreate = yes log_path = /opt/local/var/log/mail/mail-err.log login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c mail_access_groups = mail mail_attachment_dir = /private/var/mail/tld.hostname.mail/attachments mail_attachment_fs = sis posix:mode=0666 mail_gid = mail mail_home = /private/var/mail/tld.hostname.mail mail_location = mdbox:/private/var/mail/tld.hostname.mail/%Ln/mdbox:LAYOUT=fs mail_log_prefix = "%s(pid %p user %u): " mail_plugins = quota zlib acl fts fts_solr fts_lucene mail_privileged_group = mail mail_uid = _dovecot 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 imapsieve vnd.dovecot.imapsieve mdbox_rotate_size = 200 M namespace inbox { inbox = yes location = mailbox Archive { auto = subscribe special_use = \Archive } mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = create special_use = \Junk } mailbox Notspam_train { auto = create special_use = \Junk } mailbox Sent { auto = subscribe special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Spam_train { auto = create special_use = \Junk } mailbox Trash { auto = create special_use = \Trash } prefix = separator = / } passdb { driver = pam name = pam } plugin { fts = solr fts_autoindex = yes fts_autoindex_exclude = \Junk fts_solr = url=http://127.0.0.1:8983/solr/dovecot/ imapsieve_mailbox1_before = file:/opt/local/etc/dovecot/sieve/report-spam.sieve imapsieve_mailbox1_causes = COPY APPEND imapsieve_mailbox1_name = Spam_train imapsieve_mailbox2_before = file:/opt/local/etc/dovecot/sieve/report-ham.sieve imapsieve_mailbox2_causes = COPY APPEND imapsieve_mailbox2_name = Notspam_train mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename mail_log_fields = uid box msgid from subject size flags quota_grace = 10%% quota_rule = *:storage=16G quota_rule2 = Trash:storage=+256M quota_warning = storage=100%% quota-exceeded %u quota_warning2 = storage=80%% quota-warning %u recipient_delimiter = + sieve = /private/var/mail/tld.hostname.mail/rules/%Ln/dovecot.sieve sieve_after = /opt/local/etc/dovecot/sieve-after.d sieve_before = /opt/local/etc/dovecot/sieve-before.d sieve_dir = /private/var/mail/tld.hostname.mail/rules/%Ln/%u sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.environment sieve_pipe_bin_dir = /opt/local/etc/dovecot/sieve sieve_plugins = sieve_imapsieve sieve_extprograms sieve_quota_max_storage = 50M } postmaster_address = postmaster@hostname.tld protocols = imap lmtp sieve quota_full_tempfail = yes sendmail_path = /opt/local/sbin/sendmail service auth-worker { group = mail user = root } service auth { extra_groups = _keytabusers idle_kill = 15 mins unix_listener /opt/local/var/spool/postfix/private/auth { group = mail mode = 0660 user = _postfix } } service dns-client { unix_listener dns-client { mode = 0600 } } service imap-login { inet_listener imap { address = 127.0.0.1, ::1 port = 143 } inet_listener imaps { port = 993 ssl = yes } process_min_avail = 6 service_count = 0 vsz_limit = 2 G } service imap { process_limit = 200 process_min_avail = 6 } service lmtp { unix_listener /opt/local/var/spool/postfix/private/dovecot-lmtp { group = mail mode = 0660 user = _postfix } } ssl = required ssl_ca = </opt/local/etc/certificates/cert.chain.pem ssl_cert = </opt/local/etc/certificates/cert.cert.pem ssl_cipher_list = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 ssl_dh = # hidden, use -P to show it ssl_key = # hidden, use -P to show it ssl_min_protocol = TLSv1.2 ssl_prefer_server_ciphers = yes userdb { driver = passwd name = passwd } verbose_proctitle = yes protocol lda { mail_fsync = optimized mail_plugins = quota zlib acl fts fts_solr fts_lucene sieve push_notify } protocol imap { mail_max_userip_connections = 50 mail_plugins = quota zlib acl fts fts_solr fts_lucene imap_acl imap_quota imap_zlib imap_sieve } protocol lmtp { mail_fsync = optimized mail_plugins = quota zlib acl fts fts_solr fts_lucene sieve }
On 22/05/2021 20:36 Steven Smith <steve.t.smith@gmail.com> wrote:
I’m trying to configure dovecot to use mailbox subfolders that look like both foo/bar on the IMAP client and the filesystem.
But the subfolders created all look like foo.bar, not foo/bar with a proper nesting structure.
This also happens when the folder ‘bar’ is moved into the folder ‘foo’—A new folder `foo.bar’ is created.
I believe that i’m following the configuration rules at https://wiki.dovecot.org/MailboxFormat/Maildir#Maildir_and_filesystems and https://wiki.dovecot.org/MailLocation/Maildir. This issue happens whether I set separator to its default, ‘.’, or ‘/’:
Namespace separator and filesystem separator are different. It should be using / as *filesystem* separator with LAYOUT=FS, and it should be using namespace separator / since you've specified it.
Can you do doveadm exec imap -o mail_debug=yes -u target-user
and provide logs after 1 SELECT INBOX
Aki
Thank you very much!
Here’s what I see:
# separator = [this line commented out in 10-mail.conf]
1 SELECT INBOX imap(pid 35573 user target-user): Debug: Mailbox INBOX: Mailbox opened because: SELECT
- FLAGS (\Answered \Flagged \Deleted \Seen \Draft $NotJunk NotJunk $Forwarded Redirected $MailFlagBit0 Forwarded $MailFlagBit2 $MailFlagBit1)
- OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft $NotJunk NotJunk $Forwarded Redirected $MailFlagBit0 Forwarded $MailFlagBit2 $MailFlagBit1 \*)] Flags permitted.
- 21627 EXISTS
- 0 RECENT
- OK [UNSEEN 14430] First unseen.
- OK [UIDVALIDITY 1558435823] UIDs valid
- OK [UIDNEXT 22415] Predicted next UID
- OK [HIGHESTMODSEQ 39411] Highest 1 OK [READ-WRITE] Select completed (0.001 + 0.000 secs).
separator = /
imap(pid 35890 user target-user): Debug: Mailbox INBOX: Mailbox opened because: SELECT
- FLAGS (\Answered \Flagged \Deleted \Seen \Draft $NotJunk NotJunk $Forwarded Redirected $MailFlagBit0 Forwarded $MailFlagBit2 $MailFlagBit1)
- OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft $NotJunk NotJunk $Forwarded Redirected $MailFlagBit0 Forwarded $MailFlagBit2 $MailFlagBit1 \*)] Flags permitted.
- 21627 EXISTS
- 0 RECENT
- OK [UNSEEN 14430] First unseen.
- OK [UIDVALIDITY 1558435823] UIDs valid
- OK [UIDNEXT 22415] Predicted next UID
- OK [HIGHESTMODSEQ 39411] Highest 1 OK [READ-WRITE] Select completed (0.001 + 0.000 secs).
Steve
On May 24, 2021, at 1:56 AM, Aki Tuomi <aki.tuomi@open-xchange.com> wrote:
On 22/05/2021 20:36 Steven Smith <steve.t.smith@gmail.com> wrote:
I’m trying to configure dovecot to use mailbox subfolders that look like both foo/bar on the IMAP client and the filesystem.
But the subfolders created all look like foo.bar, not foo/bar with a proper nesting structure.
This also happens when the folder ‘bar’ is moved into the folder ‘foo’—A new folder `foo.bar’ is created.
I believe that i’m following the configuration rules at https://wiki.dovecot.org/MailboxFormat/Maildir#Maildir_and_filesystems and https://wiki.dovecot.org/MailLocation/Maildir. This issue happens whether I set separator to its default, ‘.’, or ‘/’:
Namespace separator and filesystem separator are different. It should be using / as *filesystem* separator with LAYOUT=FS, and it should be using namespace separator / since you've specified it.
Can you do
doveadm exec imap -o mail_debug=yes -u target-user
and provide logs after1 SELECT INBOX
Aki
This is resolved by deleting the Mail account on macOS, then adding it back.
Apparently macOS Mail.app must cache these settings at account creation time.
The correct settings are:
mail_location = mdbox:/private/var/mail/tld.hostname.mail/%Ln/mdbox:LAYOUT=fs namespace inbox { … separator = / … }
participants (2)
-
Aki Tuomi
-
Steven Smith