当我转到我的 Exchange 箱(SBS 2008)上的本地终端时,我可以执行以下操作:
telnet 127.0.0.1 25
220 Exchange banner here
EHLO example.com
250 Server name
然而,当我从另一个盒子或从服务器的实际 IP 进入时,我得到了这个:
telnet 192.168.21.20 25
220 Exchange banner here
EHLO example.com
421 4.4.1 Connection timed out
与主机的连接丢失。
奇怪的是,该服务器目前投入生产并且运行良好(接收我们整个域的邮件)。但我的 C# 程序无法向其发送邮件(它们会收到相同的错误)。
有任何想法吗?
答案1
Exchange 服务器似乎正在尝试重新连接您(类似 ident?),因此您应该尝试使用数据包嗅探器(如 Wireshark)来查看在哪里它正在尝试连接。
解释该消息的另一种方式。SMTP 与大多数互联网协议一样,使用CR/LF
pair 作为行终止符。telnet 协议也是如此。但是,在您的第二个示例中,客户端(是“telnet”还是其他名称?)可能会不是发送正确的行结尾 - 可能发送的只是LF
或完全不同的东西。再次使用 Wireshark 来找出答案。
与上面的 #2 相关:也许您的第二台机器有一个防病毒程序,它会试图变得聪明并拦截 SMTP 连接?我见过很多次它们破坏 POP3 的情况。
答案2
在您的应用程序中,您使用的是标准 smtp 库还是通过原始套接字发送命令?如果您通过原始套接字发送命令,请检查是否在命令后发送了 \r\n。
J