Why is mail being rejected with No Mailbox found due to MiXed CaSe incoming e-mail?

If you are using a newer and standard compliant MTA to deliver mail to Cyrus IMAP’s LMTP agent you may run into a problem where mail will be bounced and not delivered with errors like this in your maillog:

Feb 29 10:01:02 myhost lmtpunix[12345]: append_check() of 'MyDomain.tld!user.MyUser' failed (Mailbox does not exist)

This is due to LMTP adhering to the RFC standards and the MTA adhering to the RFC standards of preserving the case in the e-mail address. so User@MyDomain.tld is not the same as user@mydomain.tld. And this causes issues if with users who alter the case of their e-mail address when signing up for mailing lists, or sending e-mail.

However, all is not lost there is a solution. Cyrus IMAP has an option that can be added into the imapd.conf:

lmtp_downcase_rcpt: true

Inserting that into your imapd.conf(5) and restarting cyrus imap will cause cyrus to “downcase” the e-mail address up to the recipient delimiter of +. The result will be this:

User@MyDomain.tld -> user@mydomain.tld
user@mydomain.tld -> user@mydomain.tld
User+PostFolder@MyDomain.tld -> user+PostFolder@MyDomain.tld

Someone verify that the domain will actually be downcased when a + is used

Note that this option first appeared in Cyrus IMAP 2.1.14.