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)

「HADES」がサーバーのホスト名である以下のコードを使用して、mail.smtp.localhost を明示的に定義しようとしましたが、うまくいきませんでした。

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 がない場合、基本的にはIPアドレスであるアドレスリテラルを使用する必要があります(セクション4.1.3アドレスリテラルを参照)。

また、SMTP サーバーが、不明または認証されていないホストへのアクセスを積極的に制限していないことを確認してください。

于 2013-01-07T16:39:20.777 に答える