use dovecot to store mails with lmtp
After more than a year working on my mail setup, I think I have it running in a pretty good way. As some of the stuff is not documented at all in the wide of the internet, I will post parts here to make it accessible to others.
Many setups use the MTA (postfix, exim) to store mails on the filesystem. My setup lets dovecot take care of that. That way it is the only process able to change data on the filesystem.
to make this work, we first need a lmtp socket opened by dovecot. The configuration part looks like this
service lmtp {
unix_listener /var/spool/postfix/private/delivery.sock {
mode = 0600
user = postfix
group = postfix
}
}
LMTP is a lightweight smtp protocol and most mail server components can speak it.
Next we need to tell postfix to send mails to this socket instead storing it on the filesystem. This can be done with with the following setting
mailbox_transport = lmtp:unix:/var/spool/postfix/private/delivery.sock
or for virtal accounts with
virtual_transport = lmtp:unix:/var/spool/postfix/private/delivery.sock
Now postfix will use the socket to deliver the mails.
It is also possible to use other services between these two like dspam. In my case postfix delivers the mails to dspam and that will deliver them to dovecot.
For dovecot change the path of the socket to something dspam can reach. I’m
using /var/run/delivery.sock
.
Then change the dspam.conf to use that socket as a delivery host
DeliveryProto LMTP
DeliveryHost "/var/run/delivery.sock"
As postfix needs to speak to dspam, we set dspam to create a socket too
ServerMode auto
ServerDomainSocketPath "/var/run/dspam.sock"
ServerMode
should be set to either auto
or standard
.
Now the only thing left to do is to tell postfix to use that socket to deliver its mails. For that, set the options from before to the new socket
virtual_transport = lmtp:unix:/var/run/dspam.sock
And with that, we have a nice setup where only dovecot stores mails.