我正在使用 postfix 将邮件中继到 Exchange 2010。这是我的配置:
relayhost = [smtp.exchange.2010]
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/relay_passwd
smtp_sasl_security_options =
#smtp_sasl_mechanism_filter = ntlm
(/etc/postfix/relay_passwd 包含 Exchange 上一些帐户的登录信息)通过此配置,我可以将电子邮件转发到 Exchange。问题是:从 Postfix 发送的消息有标头:
X-MS-Exchange-Organization-AuthAs: Anonymous
并且该邮件在 Exchange 系统上被视为未经身份验证的邮件(即,当发送到需要发件人进行身份验证的通讯组时,我收到错误:#550 5.7.1 RESOLVER.RST.AuthRequired;需要身份验证##rfc822;[电子邮件保护])。我使用 Outlook 和 Postfix 中的相同帐户,可以毫无问题地发送。我发现两种情况之间的区别是:Outlook 使用 NTLM 身份验证机制发送,Postfix 使用 LOGIN 机制发送。有什么想法吗?
答案1
根据 AlexRobinson 的回答,问题出在 Postfix 上。此问题在 Postfix 2.9 及更高版本中已修复(默认情况下): http://www.postfix.org/postconf.5.html#smtp_send_dummy_mail_auth
[Incompat 20111106] To work around broken remote SMTP servers, the Postfix SMTP client by default no longer appends the "AUTH=<>" option to the MAIL FROM command. Specify "smtp_send_dummy_mail_auth = yes" to restore the old behavior.
答案2
我有同样的问题。如果电子邮件发送给组而不是个人,则会导致问题。如果邮件未经身份验证,Exchange 服务器将不会发送给组。但是,如果已将 postfix 设置为通过登录进行身份验证,那么为什么电子邮件未经身份验证?提示:如果您使用 telnet 发送邮件,则电子邮件将要获得 AUTH。电子邮件的标题将是X-MS-Exchange-Organization-AuthAs: Internal
(就我而言)。电子邮件将发送到群组!
我发现以下情况(通过将 postfix 对等日志记录级别设置为 4):postfix 发送 SMTP 命令Mail From: ...... AUTH=<>
。将 去掉AUTH=<>
,一切正常。将其放入,Exchange 会说,.... Anonymous
。
我现在正在查找为什么 Postfix 会说谎。
啊,找到了。postfix smtp_proto.c
v2.8 中的第 1358 行。硬编码。好吧,现在。这太不幸了。从安全角度来看,该代码非常正确,但如果您可以控制谁在 postfix SMTP 客户端中获取此 SMTP 发送代码,则不正确。
/* postfix: smtp_proto.c
#ifdef USE_SASL_AUTH
if (var_smtp_sasl_enable
&& (session->features & SMTP_FEATURE_AUTH))
vstring_strcat(next_command, " AUTH=<>");
#endif
到目前为止,除了修补smtp_proto.c
并从头开始构建 Postfix,我不知道还能做什么。真恶心。