Contents


 1. Using LMTP over UNIX Socket

 2. Using LMTP over TCP Socket

 3. Striping domain to avoid user unknown / doesn't exist error

 4. Verifying recipients using LMTP

 5. Delivering mails case insensitively

Exim provides support for LMTP over UNIX sockets using the LMTP transport
[http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_lmtp_transport.html],
your distribution may/not provide this, run exim -bV and check for 'lmtp' in
'Transports:'. Support for LMTP over TCP sockets is provided by the SMTP
transport
[http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_smtp_transport.html].

Using LMTP over UNIX Socket
---------------------------

Use this configuration if dovecot runs on the same host as exim.

Example router:

---%<-------------------------------------------------------------------------
local_user:
        debug_print = "R: local_user for $local_part@$domain"
        driver = accept
        domains = +local_domains
        check_local_user
        transport = dovecot_lmtp
        cannot_route_message = Unknown user
---%<-------------------------------------------------------------------------

Example transport:

---%<-------------------------------------------------------------------------
dovecot_lmtp:
        driver = lmtp
        socket = /var/run/dovecot/lmtp
        #maximum number of deliveries per batch, default 1
        batch_max = 200
        #allow suffixes/prefixes (default unset)
        rcpt_include_affixes
---%<-------------------------------------------------------------------------

Using LMTP over TCP Socket
--------------------------

Example router:

---%<-------------------------------------------------------------------------
local_user:
        transport = dovecot_lmtp
        domains = +local_domains
        driver = manualroute
        route_list = "* 192.168.1.0 byname"
        #if destination server is the local host enable this
        #self = send
---%<-------------------------------------------------------------------------

Set IP and port as appropriate to your setup.

Example transport:

---%<-------------------------------------------------------------------------
dovecot_lmtp:
        driver = smtp
        #allow suffixes/prefixes (default unset)
        rcpt_include_affixes
        protocol = lmtp
        port = 2525
---%<-------------------------------------------------------------------------

Striping domain to avoid user unknown / doesn't exist error
-----------------------------------------------------------

If you are using a userdb which does not have domain names, you may need to add
a setting to 20-lmtp.conf

---%<-------------------------------------------------------------------------
protocol lmtp {
   ...
   # use %n to strip away the domain part
   auth_username_format = %n
}
---%<-------------------------------------------------------------------------

Symptoms:

 * Exim says something like "LMTP error after RCPT ... 550 ... User doesn't
   exist  someuser@somedomain"
 * Dovecot verbose log says something like "auth-worker(9048):
   passwd(someuser@somedomain): unknown user"

Verifying recipients using LMTP
-------------------------------

You can use callout verification to avoid accepting mail for addresses which do
not exist in Dovecot. Below is a config snippet which could be used in
acl_smtp_rcpt to achieve this:

---%<-------------------------------------------------------------------------
deny
        message = invalid recipient
        domains = +local_domains
        !verify = recipient/callout=no_cache
---%<-------------------------------------------------------------------------

For more information on address verification see the related section of the
Exim specification
[http://www.exim.org/exim-html-current/doc/html/spec_html/ch-access_control_lists.html#SECTaddressverification].

Delivering mails case insensitively
-----------------------------------

*Warning: *Just use this setup if all your login names contain only lower case
characters! (On Linux see /etc/adduser.conf under NAME_REGEX variable).

Exim retains the case of the local part. Dovecot's LMTP /may/ fail looking up
an incorrect cased local part in your userdb. You can solve this problem by
extending the /protocol lmtp/ section:

---%<-------------------------------------------------------------------------
protocol lmtp {
   ...
   # use %Ln to strip away the domain part
   auth_username_format = %Lu
}
---%<-------------------------------------------------------------------------

(If you don't mind allowing case insensitive logins for dovecoth
authentication, you may set /auth_username_format/ in the global configuration
accordingly and renounce the above change).

In case you prefer to configure exim to lower case the local part instead, add
a router just before your local delivery router:

---%<-------------------------------------------------------------------------
lowercase_local:
        debug_print = "R: lower case local_part for local delivery"
        driver = redirect
        redirect_router = local_user
        data = ${lc:${local_part}}
---%<-------------------------------------------------------------------------

Make sure to reference the name you have chosen for your local delivery router
within /redirect_router/.

(This file was created from the wiki on 2019-06-19 12:42)
