Dovecot shared mailboxes (the correct way)
I've just implemented shared mailboxes in dovecot (which rocks, btw). It isn't difficult, but I don't think it's very well documented...
The preferred way to do this is with IMAP Namespaces. My natural approach would be to create something like a Maildir tree /srv/mail/shared
, and make this the "public" namespace. Then set filesystem permissions on subtrees of that, to define who can see what. Unfortunately, dovecot uses strict Maildir++, and won't let you create mailboxes inside each other (on the filesystem) /Foo/Bar
is stored as a Maildir called .Foo.Bar
, so subtrees don't exist, so this isn't an option. The up-comming dbox format should allow something like this, but it isn't usable yet.
My solution was to create multiple namespaces. One for each shared mailbox. Users are given permission to use them via file-system permissions (i.e. group membership), example:
# Default namespace, needed if you add namespaces namespace private { prefix = separator = / index = yes } # Office inbox, available to receptionists, office managers, and directors: namespace public { prefix = office/ separator = / location = maildir:/srv/mail/office/.Maildir:CONTROL=~/.Maildir/control/office:INDEX=~/.Maildir/index/office hidden = no } # Umask for shared folders umask = 0007
Setting CONTROL
and INDEX
mean that dovecot's metadata is stored in the user's personal Maildir, so users who don't have permission to see the shared mailbox don't get errors.
The permissions of the mailbox should be done as follows:
# touch /srv/mail/office/dovecot-shared # chown -R mail.office-mailbox /srv/mail/office # find /srv/mail/office -type d -print0 | xargs -0 chmod 2770 # find /srv/mail/office -type f -print0 | xargs -0 chmod 660
If you want a common subscription list, you have to manually symlink:
# ln -s /srv/mail/office/subscriptions ~luser/.Maildir/control/office/
Seems to work well. (at least with thunderbird)