Dovecot LDA with Sendmail ========================= The following describes how to configure Sendmail to use 'deliver' where 'root' permission is not granted and Dovecot runs under a single user ID. It may need some adjustment for more typical setups. Other assumptions are that Sendmail is configured for virtual hosting and that local-system mail delivery is not handled by 'deliver'. Allowing that 'sendmail.mc' has 'MAILER(procmail)dnl' included, edit 'sendmail.cf' adding these lines after the 'Mprocmail' definition: ---%<------------------------------------------------------------------------- ######################*****############## ### DOVECOT Mailer specification ### ##################*****################## Mdovecot, P=/usr/local/libexec/dovecot/deliver, F=DFMPhnu9, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP/HdrFromSMTP, T=DNS/RFC822/X-Unix, A=deliver -d $u ---%<------------------------------------------------------------------------- If you're using 'sendmail.mc' then put the lines above into a new file '/usr/share/sendmail/cf/mailer/dovecot.m4' and put 'MAILER(dovecot)' into your 'sendmail.mc' =================================== Another method of doing the above is by editing your 'hostname.mc' with the following three lines: ---%<------------------------------------------------------------------------- FEATURE(`local_procmail', `/opt/dovecot/libexec/dovecot/deliver',`deliver -d $u') MODIFY_MAILER_FLAGS(`LOCAL', `-f') MAILER(procmail) ---%<------------------------------------------------------------------------- After editing 'hostname.mc' with the above, be sure to remake your 'hostname.cf' file. This is confirmed to work with: * dovecot-1.0.7 * FreeBSD 6.3-RELEASE-p3 i386 * sendmail Version 8.14.2 * Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF STARTTLS TCPWRAPPERS USERDB XDEBUG =================================== For non-'root' setups apply SUID and SGID permissions to 'deliver': ---%<------------------------------------------------------------------------- chown dovecot:dovecot /usr/local/libexec/dovecot/deliver chmod ug+s /usr/local/libexec/dovecot/deliver ---%<------------------------------------------------------------------------- If 'sendmail' runs under a different non-'root' UID via * 'define(`confRUN_AS_USER', `sendmail')dnl' in 'sendmail.mc', then the /env_put(t_strconcat("RESTRICT_/ lines in 'deliver.c' must be commented-out. Now add a ---%<------------------------------------------------------------------------- virtualdomain.example.com dovecot:dovecot ---%<------------------------------------------------------------------------- line for each virtual domain to 'mailertable.cf' and run 'makemap hash mailertable.db < mailertable.cf'. The 'dovecot' (or some other random text) after the colon character is required, else 'sendmail' will fail to pass command arguments to 'deliver' correctly. Make sure all the virtual domains are in the 'virtuserdomains' file. Be aware that 'sendmail' logs /stat=unknown mailer error 89/ if 'deliver' returns any unusual error. This message is misleading and looks as though 'sendmail' were failing to find the 'deliver' executable. It actually means that the error is unknown. As of v1.0.rc27 this should never happen. (This file was created from the wiki on 2009-10-16 04:42)