eximconfiguration:503未使用的AUTH命令

我在Windows服务器上运行一个软件,通过远程SMTP服务器发送电子邮件通知。 它有很less的configuration选项,只支持不带SSL / TLS的基本SMTPauthentication。 我有一个Debim服务器上运行的exim4,这将是这个Windows程序的SMTP服务器。 它使用默认configuration进行设置,并允许AUTH PLAIN和AUTH LOGIN未encryption的连接。 我已经通过telnet发送了一封电子邮件:

telnet servername 25 ehlo test 250-AUTH PLAIN LOGIN ... auth plain XXX 235 Authentication succeeded mail from: ... ... 

但是,我想连接到此服务器的程序无法连接。 为了明白为什么,我在连接期间运行了一个数据包嗅探器,并查看以下会话:

 C: HELO hostname S: 250 Hello hostname C: AUTH LOGIN XXX | XXX S: 503 AUTH command used when not advertised | 500 unrecognized command C: QUIT S: 221 closing connection 

我对SMTP协议不够熟悉,无法理解这里发生了什么。 我需要改变我的exim4 SMTP服务器,以允许此连接进行?

503 AUTH command used when not advertised本质上是自我解释的,它并没有为客户提供使用AUTH命令的选项。 这很可能是因为客户端使用了HELO而不是EHLO (当你进行telnettesting时,我会注意到你使用的是HELO )。

SMTP身份validation是扩展SMTP的一部分,它使用EHLO命令启动; “普通旧式”的SMTP不支持身份validation,所以它在技术上是一个非法的命令,即使一些SMTP服务器可能仍然允许。

如果可能的话,最好的解决scheme是告诉程序使用扩展SMTP( EHLO ),否则可能会有一个exim命令强制它允许在HELOtypes连接上使用AUTH。

**更新**

根据这个职位在这里: http : //www.exim.org/lurker/message/20040901.063858.126f66ac.en.html

EHLO(不是HELO)必须由客户在AUTH之前提供。

也就是说,AUTH命令不能被使用,除非被广告(通过EHLO,根据auth_advertise等)。 这个行为在Exim 4.20中被加强了,不是一个选项。

看起来你需要一个不同的MTA,如果你不能让你的应用程序做EHLO 。 或者,您是否需要身份validation,您是否可以使用基于IP的ACL来完成相同的操作?

最终的解决scheme

Exim确实有这方面的工作,使用allow_auth_unadvertised在这里描述,你可以做这样的事情:

 hosts = * control = allow_auth_unadvertised