summaryrefslogtreecommitdiffstats
path: root/doc/wiki/LMTP.txt
blob: ead650af23a80370cab3e123f5317d2f788d48c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
LMTP Server
===========

LMTP uses the same settings as <LDA.txt>, as specified in 'conf.d/15-lda.conf'
in example configuration. There is also a bit of extra configuration in
'conf.d/20-lmtp.conf'. The main difference is that the LDA is a short-running
process, started as a binary from command line, while LMTP is a long-running
process started by Dovecot's master process.

Envelope Addresses
------------------

Compared to dovecot-lda parameters, the addresses are taken from:

 * -f / Envelope sender address: This is the MAIL FROM: value from LMTP
   session.
 * -r / Final envelope recipient address: This is the RCPT TO: value from LMTP
   session.
 * -a / Original envelope recipient address: This defaults to same as RCPT TO:
   value, but may be overridden by reading it from a header specified by
   'lda_original_recipient_header' setting.
 * -d / Destination username: This is the same as RCPT TO: value, but with the
   "+extension" part removed when 'recipient_delimiter' setting is set. If
   usernames differ from recipient email addresses, the userdb must handle the
   translation.

Listeners
---------

You can configure LMTP to be listening on TCP or UNIX sockets:

---%<-------------------------------------------------------------------------
# add lmtp to protocols, otherwise its listeners are ignored
protocols = imap pop3 lmtp

service lmtp {
  inet_listener lmtp {
    address = 192.168.0.24 127.0.0.1 ::1
    port = 24
  }

  unix_listener lmtp {
    #mode = 0666
  }
}
---%<-------------------------------------------------------------------------

The UNIX listener on $base_dir/lmtp is enabled by default when protocols
setting contains lmtp.

Security
--------

Unfortunately LMTP process currently needs to run as root, and only temporarily
drop privileges to users. Otherwise it couldn't handle mail deliveries to more
than a single user with different UID. If you're using only a single global
UID/GID, you can improve security by running lmtp processes as that user:

---%<-------------------------------------------------------------------------
service lmtp {
  user = vmail
}
---%<-------------------------------------------------------------------------

LMTP Proxying
-------------

It's possible to use Dovecot LMTP server as a proxy to remote LMTP or SMTP
servers. The configuration is similar to <IMAP/POP3 proxying>
[PasswordDatabase.ExtraFields.Proxy.txt], but you'll need to tell Dovecot LMTP
to issue passdb lookups:

---%<-------------------------------------------------------------------------
lmtp_proxy = yes
---%<-------------------------------------------------------------------------

Performance
-----------

For higher volume sites, it may be desirable to increase the number of active
listener processes.  A range of 5 to 20 is probably good for most sites:

---%<-------------------------------------------------------------------------
service lmtp {
  process_min_avail = 5
}
---%<-------------------------------------------------------------------------

Logging
-------

If you want to store LMTP delivery logs to a different file, you can do it
with:

---%<-------------------------------------------------------------------------
service lmtp {
  executable = lmtp -L
}
protocol lmtp {
  info_log_path = /var/log/dovecot-lmtp.log
}
---%<-------------------------------------------------------------------------

For rawlogs, please see <Debugging.Rawlog.txt>

Plugins
-------

 * Most of the <Dovecot plugins> [Plugins.txt] work with LMTP.
 * Virtual quota can be enforced using <Quota plugin> [Quota.txt].
    * 'lmtp_rcpt_check_quota = yes' enables quota checking already at RCPT TO
      stage. This check isn't done for proxied connections.
 * Sieve language support can be added with the <Pigeonhole Sieve plugin>
   [Pigeonhole.Sieve.txt].

Address extension delivery
--------------------------

To make address extension work with LMTP you must check these variables are set

 * lmtp_save_to_detail_mailbox = yes
 * recipient_delimiter = +

Using LMTP with different MTAs
------------------------------

 * <Postfix> [HowTo.PostfixDovecotLMTP.txt]
 * <Exim> [LMTP.Exim.txt]
 * HALON [http://wiki.halon.se/LMTP]

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