Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
到Mercury邮件服务器的JavaMail API连接错误_Java_Smtp_Jakarta Mail_Mercury Mta - Fatal编程技术网

到Mercury邮件服务器的JavaMail API连接错误

到Mercury邮件服务器的JavaMail API连接错误,java,smtp,jakarta-mail,mercury-mta,Java,Smtp,Jakarta Mail,Mercury Mta,我正在尝试用java应用程序连接Mercury邮件服务器,我正在使用JavaMail api。连接不成功,我在日志中收到以下错误: EHLO x.x.x.x 554无效的HELO格式 这意味着它连接到服务器,但helo格式不是服务器喜欢的格式。我已经厌倦了调试它,我在JavaMail“SMTPTransport”类中找到了这段代码,它说: serverOutput.write(cmdBytes) serverOutput.write(CRLF) serverOutput.flush() 根据守则

我正在尝试用java应用程序连接Mercury邮件服务器,我正在使用JavaMail api。连接不成功,我在日志中收到以下错误:

EHLO x.x.x.x
554无效的HELO格式

这意味着它连接到服务器,但helo格式不是服务器喜欢的格式。我已经厌倦了调试它,我在JavaMail“SMTPTransport”类中找到了这段代码,它说:

serverOutput.write(cmdBytes)
serverOutput.write(CRLF)
serverOutput.flush()

根据守则: 私有静态最终字节[]CRLF={(字节)'\r',(字节)'\n'}
这似乎与RFC 821一致

我知道windows上的\n有不同的含义,但我不确定这是否真的是问题的根源?如果不是,那是什么原因造成的? 我用邮件客户端检查了邮件服务器,它工作正常,我用James邮件服务器检查了代码,它也工作正常

JavaMail API版本为:1.4.5(最新版本)

Mercury/32:4.7

您可能需要查看服务器上的日志,以了解它真正在抱怨什么,但是。。。您可以尝试将mail.stmp.localhost属性设置为计算机的正确DNS主机名。从调试输出来看,您的计算机似乎无法确定自己的名称,因此正在发送IP地址。

我在
554无效HELO格式上进行了谷歌搜索,并获得了大量有关您特定Mercury问题的信息。这是一只虫子


等等。

对于我来说,在一个web项目中,PHPMailer()类正在强制进行身份验证。将Auth更改为false修复了此问题。在您的语言中,可以选择类似的选项将Auth设置为false

这就是我在PHP代码中从true改为false并在PHP.ini文件中添加sendmail_的地方

    $mail = new PHPMailer();
    $mail->SMTPAuth = false;

这是来自服务器的日志,服务器和应用程序都在本地主机上,我认为ip是客户端ip而不是服务器!EHLO来自客户机,它用它发布IP,我使用127.0.0.1,但同样的情况是,就邮件服务器而言,您的应用程序就是客户机。EHLO命令应该包括客户机的主机名,在您的情况下是“localhost”还是客户机/服务器机器上的真实DNS名。“127.0.0.1”不是主机名,而是IP地址。将属性设置为实际主机名。Mercury服务器如何配置以验证客户端主机名?EHLO的参数应该是客户端的fqdn(但如果没有可用的fqdn,则可以是客户端的IP)。Mercury服务器可能被设置为验证客户端上的反向DNS和/或拒绝不可路由的客户端地址。最好的办法是使用Wireshark从工作客户端捕获会话,并与失败的会话进行比较。
serverOutput
的编码定义是什么?如果它不是二进制的,那么您可能实际上发送了CR-CR-LF,这可能是一个问题。关于serverOutput,我不确定它到底是如何工作的,我无法了解源代码,因为我提到它是JavaMail API包的一部分,但我同意你的观点,并在我的帖子中提到,我怀疑这个CRLF可能是CRLF,因为你说我已经尝试了telnet到服务器,并用相同的IP地址发送Ehlo工作正常。请注意,这一切都发生在同一台机器上,服务器、发送方和接收方都是本地主机。我不确定哪些设置可能会对此产生影响,我可以在哪里检查?就是这样!谢谢我不明白,这篇文章已经有4年多的历史了,而水星论坛上的那篇文章已经有5年了,他们还没有修复它?!