【问题标题】:Java Mail ExceptionJava 邮件异常
【发布时间】:2010-03-02 12:14:09
【问题描述】:

我目前在尝试使用 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"),但它仍然失败,有人知道吗?还是以前遇到过类似的问题?

【问题讨论】:

    标签: java jakarta-mail


    【解决方案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 的 DNS 名称(例如 stackoverflow.com),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 很有帮助。

    【讨论】:

      【解决方案2】:

      替换

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

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

      它有效:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-18
        • 2018-06-24
        • 2014-10-17
        • 2017-04-17
        • 2016-11-02
        • 2015-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多