Java Mail异常

时间:2010-03-01 03:28:24

标签: java javamail

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

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

顺便说一下,我已经将mail.smtp.auth属性设置为true,如:props.put(“mail.smtp.auth”,“true”),但它仍然失败,有没有人有想法?还是面临类似的问题?

2 个答案:

答案 0 :(得分:1)

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

例如,我输入的机器有一个不可路由的IP地址192.168.1.103,我的主机名可能是so.example.myhouse,因为我的路由器假装来自我办公桌的数据包来自(例如)69.59.196.211这是我的WAN地址。但是,如果您使用props.put("mail.from", "me@so.example.myhouse"),SMTP服务器可能会尝试进行DNS查找,但显然我的虚构主机名(即全局DNS不知道的主机名)失败了。

即使我使用映射到69.59.196.211(例如 stackoverflow.com)的DNS名称,SMTP服务器也可以执行reverse DNS lookup来检查211.196.59.69.in-addr .arpa映射到stackoverflow.com。如果失败,SMTP服务器可能会将您视为欺骗者并返回550。

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

如果没有比您可能想要发布的更多上下文(有罪客户端和服务器的名称和地址),我无法确定它是否与Java无关的SMTP / DNS问题,因此您必须自己检查这些位。您可以完全跳过Java并telnet smtp-servername 25并自行与服务器通信。如果你尝试,你会发现RFC 2821很有帮助。

答案 1 :(得分:1)

替换

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

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

它有效:)