I have several dozen IMAP mail folders (stored on the server as Maildir++, which Dovecot supports). When I'm on the go with my iPhone, I only want to see a few of them. IMAP provides a way for clients to “subscribe” to specific folders, so I figured that was the basic idea. As with all things IMAP, subscription information is stored on the server; by default, Dovecot keeps it in a file in the top-level Maildir. To avoid interfering with my more full-featured IMAP clients, I needed a way to get at my top-level Maildir with the usual permissions, but with a separate subscriptions file. Dovecot's passwd-file authentication scheme made this easy. After the default passdb passwd stanza in /etc/dovecot.conf, I appended this:

passdb passwd-file {
  args = /etc/dovecot/%d/passwd
}

Likewise for userdb. Then I created /etc/dovecot/schmonz.com/passwd with the following format:

iphone:crypted-password:real-uid:real-gid::home-dir::userdb_mail=maildir:path-to-mail:CONTROL=path-to-mail/iphone/control:INDEX=path-to-mail/iphone/index

The iPhone has no UI for manipulating subscriptions, so I logged into my webmail app as iphone@schmonz.com and set up everything the way I wanted. Unfortunately, it turns out there's a reason the iPhone has no subscription UI: it doesn't care about subscriptions at all. It just always shows you every folder it can possibly show you.

Needing to take a different tack, I kept the idea of a separate IMAP login for iPhone purposes and tweaked the details. Alongside the real Maildir++, I created a separate Maildir++ specifically for the iPhone, with strategic symlinks to my real inbox, Drafts, Sent, and Trash folders:

$ ls -la Maildir-iphone
total 1264
drwx------   2 schmonz  users    1024 Jan 31 00:37 .
drwxr-xr-x  27 schmonz  users   15872 Jan 30 21:59 ..
lrwxr-xr-x   1 schmonz  users      18 Jan 30 22:14 .Drafts -> ../Maildir/.Drafts
lrwxr-xr-x   1 schmonz  users      16 Jan 30 22:13 .Sent -> ../Maildir/.Sent
lrwxr-xr-x   1 schmonz  users      17 Jan 30 22:13 .Trash -> ../Maildir/.Trash
lrwxr-xr-x   1 schmonz  users      14 Jan 30 22:06 cur -> ../Maildir/cur
lrwxr-xr-x   1 schmonz  users      14 Jan 30 22:06 new -> ../Maildir/new
lrwxr-xr-x   1 schmonz  users      14 Jan 30 22:06 tmp -> ../Maildir/tmp

And I changed the line in /etc/dovecot/schmonz.com/passwd to this:

iphone:crypted-password:real-uid:real-gid::home-dir::userdb_mail=maildir:~/Maildir-iphone

I reopened Mail on the iPhone. After a moment, it showed only Inbox, Drafts, Sent, and Trash, and they had the same contents as Mail.app on my Mac. I marked something as read in one IMAP client, and the other noticed the change shortly thereafter. Once convinced I was working safely with my real mail, I symlinked in the handful of other folders I wanted to see on the iPhone.

It would be nice if iPhone Mail grokked IMAP subscriptions. If and when it does, I can roll back to my first attempt and undo this hack. In the meantime, it works.