Debian doesn't have it by default, so add this to the bottom of /etc/services:
lmtp 2003/tcp # Cyrus LMTP
Exim requires a remote transport to do a callback, so you need to connect to a port, not a socket.
Your transport should look like:
cyrus_lmtp: driver = smtp protocol = lmtp hosts = your.host.name allow_localhost
In /etc/cyrus.conf, uncomment the lmtp line, and change the command line from lmtpd to lmtpd -a. Copy that line, and bind it to your.host.name as well.
WARNING: this means anyone who can connect to your machine on 2003/tcp can deliver it mail. Firewall it.
Test with exim4 -bhc ip.ad.re.ss.
You cannot put hosts = localhost, else you will get:
>>> accept: condition test deferred 451 Could not complete recipient verify callout LOG: H=(fosdf) [202.49.46.2] F=<foosg@dsgsg> temporarily rejected RCPT sdgg@hs.net.nz: Could not complete recipient verify callout
See Cyrus IMAP at the Exim wiki.
Note that you can't put spaces after MAIL FROM:, and you need <>s:
user@vienne:/# telnet localhost lmtp Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 vienne LMTP Cyrus v2.2.12-Debian-2.2.12-4ubuntu1 ready LHLO foo 250-vienne 250-8BITMIME 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-SIZE 250-AUTH EXTERNAL 250 IGNOREQUOTA MAIL FROM:<from> 250 2.1.0 ok RCPT TO:<to> 550-Mailbox unknown. Either there is no mailbox associated with this 550-name or you do not have authorization to see it. 550 5.1.1 User unknown QUIT 221 2.0.0 bye
If you see:
RCPT TO:<UserWithCaps@some.domain.com> 550-Mailbox unknown. Either there is no mailbox associated with this 550-name or you do not have authorization to see it. 550 5.1.1 User unknown
but userwithcaps@some.domain.com works fine, you need to set
lmtp_downcase_rcpt: true
in your imapd.conf and restart cyrus. That is, assuming you don't want case sensitivity on your user mailboxes (and who would?).
See also:
3 pages link to LMTPNotes: