0

我曾经运行一个服务器应用程序,它每 2 小时发送一封电子邮件,但有时我会收到以下错误:

Não foi possível enviar a mensagem.
Mensagem: com.sun.mail.smtp.SMTPSendFailedException: 550 Access denied - Invalid HELO name (See RFC2821 4.1.1.1)

Jan 07, 2013 1:00:32 PM job_hidrojato.comunicacao.email.Email run
SEVERE: null
com.sun.mail.smtp.SMTPSendFailedException: 550 Access denied - Invalid HELO name (See RFC2821 4.1.1.1)

at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
at javax.mail.Transport.send0(Transport.java:169)
at javax.mail.Transport.send(Transport.java:98)
at job_hidrojato.comunicacao.email.Email.run(Email.java:186)
at java.lang.Thread.run(Thread.java:722)

我已经尝试使用下面的代码明确定义 mail.smtp.localhost,其中“HADES”是我的服务器的主机名,但它不起作用。

props.put("mail.smtp.localhost", "HADES");

此更改后生成的错误日志是相同的,因此我认为问题不在于主机名参数。我已经阅读了下面的链接,但同样没有用,所以我没有其他方法可以解决这个问题,任何帮助都将不胜感激:)

JavaMail 中的 HELO 名称无效

550 访问被拒绝 - HELO 名称无效

4

1 回答 1

2

如果您查看RFC2811第 4.1.1.1 节,它会说(强调我的):

这些命令用于向 SMTP 服务器识别 SMTP 客户端。参数字段包含 SMTP 客户端的完全限定域名 (如果可用)。在 SMTP 客户端系统没有有意义的域名的情况下(例如,当它的地址被动态分配并且没有可用的反向映射记录时),客户端应该发送一个地址文字(参见第 4.1.3 节),可选地跟随通过有助于识别客户端系统的信息。

该名称HADES不是完全限定的域名(即主机名+域,例如www.example.com,FQDN 的某些定义还需要一个点结尾(即www.example.com.,但我不确定 SMTP 是否需要)。如果您没有 FQDN ,您应该使用地址文字(请参阅第 4.1.3 节地址文字),它基本上是 IP 地址。

还要确保您的 SMTP 服务器没有主动限制对未知或未经身份验证的主机的访问。

于 2013-01-07T16:39:20.777 回答