Mavericks + Server.app + getmail (oh my!)
Is there an easy(-ish) way to get a similar workflow, having the Server retrieve emails and add them to the local IMAP server?


The key is to use the dovecot-lda program (lda for Local Deliver Agent), which can write messages into the IMAP server.

For example, if using getmail, you could provide a [destination] section which invokes dovecot-lda:

[destination]
type      = MDA_external
path      = /Applications/Server.app/Contents/ServerRoot/usr/libexec/dovecot/dovecot-lda 
arguments = ("-d", "USERNAME")
allow_root_commands = True


Note that allow_root_commands is required because getmail will need to be run as root to invoke dovecot-lda.

Aside: The path for dovecot-lda is specified in the postfix configuration file /Library/Server/Mail/Config/postfix/master.cf:

dovecot   unix  -       n       n       -       25      pipe
  flags=DRhu user=_dovecot:mail argv=/Applications/Server.app/Contents/ServerRoot/usr/libexec/dovecot/dovecot-lda -d ${user}



  What about server-side filtering? How can that be setup?


Dovecot is configured to use Sieve (/Library/Server/Mail/Config/dovecot/conf.d/90-sieve.conf). Sieve rules are stored in /Library/Server/Mail/Data/rules/%u/dovecot.sieve (see /Library/Server/Mail/Config/dovecot/conf.d/90-sieve.conf), which unfortunately isn't easily writeable.

To install additional Sieve rules, use a Sieve editor, e.g. Sieve clients. Note that you need to use the correct port (Server.app defaults to port 4190; see /Library/Server/Mail/Config/dovecot/conf.d/20-managesieve.conf).

Unfortunately, after spending far too much time trying to make this work, I've given up on using a Sieve client.

If you're root, create a .sieve file (verify syntax with sievec), then copy to /Library/Server/Mail/Data/rules/%u/dovecot.sieve. Note: %u is the user's GUID, not their user name (i.e. /Library/Server/Mail/Data/mail/%u should exist), and /Library/Server/Mail/Data/rules/%u should have permissions 775 (writable by the mail user).

If you're not root...get root and see above.

When the Sieve rules are in place, /Library/Logs/Mail/mail-info.log will contain a line similar to:

mail-info.log:Feb 13 17:14:52 lda(pid 6108 user USERNAME-NOT-GUID): Info: sieve: msgid=&lt;whatever...&gt;: ...