Намедни скрещивал sendmail c dovecot.
Раньше между MDA и dovecot была прослойка антиспама DSPAM. Но производитель перестал осуществлять поддержку и пришлось с этой прогой попрощаться. Причем у довекота свое хитрое хранилище почты, никоим образом не пересекающееся с домашними директориями пользователей. База пользователей хранится в LDAP, поиск пользователя по uid без домена. Т.е. они там просто vasia, petia, а не vasia@domen.com и т.п.
По этой причине стандартные «быстрые» howto не подошли.
Пример из официального руководства http://wiki2.dovecot.org/LDA/Sendmail не работал. После преобразования имен sendmail упорно выдавал пользователя с доменом локальной машины. Т.е. на входе преобразования petia@virt.domain.com, на выходе petia@host.com
Проблема решается путем удаления флага h и замены правила EnvToSMTP на PseudoToReal.
В результате получился вот такой m4
######################################################################
# to user = user@domain.com use F=DFMPhnu95l
# to user = user use F=DFMPnu95l
Mdovecot, P=/usr/libexec/dovecot/dovecot-lda,
F=DFMPnu95l,
S=EnvFromSMTP/HdrFromSMTP,
R=PseudoToReal/HdrFromSMTP,
T=DNS/RFC822/X-Unix,
A=/usr/libexec/dovecot/dovecot-lda -d $u
sendmail.mc содержит:
define(`confLOCAL_MAILER’,`dovecot’)dnl
MAILER(dovecot)dnl
И самое смешное, после того как все это начало работать, я подумал: » а зачем так сложно?» и прикрутил sendmail к dovecot через LMTP 🙂 Тем более что в howto было написано: Best solution is to use LMTP instead 🙂 Но к сожалению эта фраза попалась мне только после окончания прикручивания своего мейлера 🙁
FEATURE(`local_lmtp’,`[IPC]’,`FILE /var/run/dovecot/lmtp’)dnl
MAILER(local)dnl
Майлер local по автомату не подставляет имя хоста.