2010-03-01 106 views
1

我尝试使用JavaMail API发送电子邮件时,目前遇到问题。我从我的应用程序控制台获得唯一的例外是:Java邮件异常

"javax.mail.MessagingException: 550 Access denied - Invalid HELO name (See RFC2821 4.1.1.1)" 

顺便说一下,我已经把我的mail.smtp.auth属性为true:props.put(“mail.smtp.auth”,“真“),但它仍然失败,有没有人有想法?或者之前面临类似的问题?

回答

1

当发送主机名无法反向解析为始发IP地址时,SMTP服务器经常会返回550错误。这允许邮件服务器进行一点认证,发送客户端就是它说的那个人。不幸的是,许多测试客户端 - 特别是NAT设备背后的系统 - 将具有不映射到任何名称的始发IP地址。

例如,我输入的机器有一个不可路由的IP地址192.168.1.103,我的主机名可以是so.example.myhouse,它工作正常,因为我的路由器假设来自我办公桌的数据包来自(eg)69.59.196.211这是我的WAN地址。但是,如果您使用props.put("mail.from", "[email protected]"),则SMTP服务器可能会尝试进行DNS查找,并且显然会导致我虚构的主机名(即全局DNS不知道的主机名)失败。

即使我使用映射到69.59.196.211(例如 stackoverflow.com)SMTP服务器可以做一个reverse DNS lookup检查211.196.59.69.in-addr.arpa映射到stackoverflow.com DNS名称。如果失败,SMTP服务器可能会认为你是一个欺骗者,并返回一个550.

最后,发送客户端或每个主机它的IP地址块可能被SMTP服务器列入黑名单,原因是你无法控制。

没有更多的上下文,你可能想发布(有罪客户端和服务器的名称和地址)我不能确定它是一个与Java无关的SMTP/DNS问题,所以你必须检查这些位你自己。你可以跳过Java,然后自己和服务器通话。如果您尝试,您会发现RFC 2821有帮助。

1

更换

props.put("mail.smtp.auth", true); 

props.put("mail.smtp.auth", "true"); 

和工程:)