我在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