我们有一个 Java Web 应用程序需要向我们的用户发送电子邮件,当这些电子邮件尝试发出时,我收到此 Java 错误:
javax.mail.MessagingException: Could not connect to SMTP host: hostname.example.com, port: 25, response: 421
我开始通过 telnet 尝试一些 SMTP 命令来排除此异常sendmail
。我发现它与 Linux 服务器和 Windows 服务器的交互方式存在奇怪的差异。
在 Linux 上,我可以运行:
telnet hostname.example.com 25
结果是:
220 ******************************************************************************************************************************************************************************
HELO hostname.example.com
250 hostname.example.com Hello [xxx.xxx.xxx.xxx], pleased to meet you
(xxx.xxx.xxx.xxx 替换了我运行命令的 IP 地址telnet
,但星号是不是混淆任何东西——这正是命令的输出)
但是,在 Windows Server 上,在同一子网、vlan 上,Windows 防火墙已禁用,我得到以下信息:
telnet hostname.example.com 25
给我:
220 *********************************************************************************************************************************************************
********************
HELO hostname.example.com
500 5.5.1 Command unrecognized: "XXXX XXXXXXXXXXXXXXXXXXX"
(上面的输出中都没有*
混淆X
——这正是命令的输出)
Linux/Windows 客户端和服务器之间没有代理sendmail
。
答案1
原来这是防火墙的问题。我们的思科防火墙设置为执行 ESMTP 检查,我们按照本指南来禁用它。