设置Exim对用户进行身份validation,然后使用不同的身份validation通过smarthost中继SMTP邮件

我试图使用Exim作为一个SMTP服务器,将邮件作为智能主机转发到我们的Mandrill服务。 (这一点将使用Exim来validation我们的用户的IMAP邮件和validation他们对我们的LDAP服务器,而依靠Mandrill交付。)

我最初曾将Exim设置为smarthost,并在Exim文件夹中的.client文件中具有Mandrill设置。 这工作正常,我可以使用telnet或MUA发送邮件,并正确地传递了Mandrill。

然后我启用了TLS和身份validation,并阻止未经身份validation的用户使用Exim。 这也正常工作 – TLS是可操作的,我可以连接和身份validation。 但是,这个身份validation中的东西已经打破了智能主机中继 – 我怀疑是因为Exim将我的“本地”LDAP身份validation凭据传递给Mandrill而不是我指定的.client凭据。 我的mainlog文件中的错误如下所示:

2014-04-24 06:54:53 1WchYz-0007Db-3E远程邮件服务器在RCPT TO :: host后发生SMTP错误smtp.us-east-1.mandrillapp.com [54.237.217.91]:454 4.7.1:Relay拒绝访问

如何设置Exim来validation传入的用户,但是使用不同的凭据集来validationSMTP中继?

这两个authentication是独立的。

使用客户端身份validation程序,您可以启用Exim对传出连接进行身份validation。 您需要在Exim passwd.client文件中为每个需要validation的服务器configuration一行。 exim_passwd_client的手册页描述了密码文件的格式。

传入身份validation是通过服务器身份validation程序完成的。 这些可能在默认configuration中被注释掉了。 exim_passwd的手册页描述了passwd文件。 您应该考虑在提交端口(587)上启用TLS以供用户发送消息。 文件星号中的以下macros应启用传入身份validation。

 auth_advertise_hosts = ${if eq{$tls_cipher}{}{}{*}} daemon_smtp_ports = 25 : 587 

要允许validation用户发送传出邮件,您将需要接受某些点的连接。 如果您的configuration有规则来处理本地发件人,如:

 accept hosts = +relay_from_hosts control = submission/sender_retain 

添加一条规则:

 accept authenticated = * control = submission/sender_retain