-1

GmailのSMTPサーバーを使用してメールを送信したい。次のコードを実行すると、サーバーに接続されない理由を教えてください。

import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;

public class SendTrick {

  public static void main(String[] args) {
    Properties props = new Properties();
    props.put("mail.smtp.host", "465");
    props.put("mail.from", "example@gmail.com");
    props.put("mail.smtp.host", "smtp.gmail.com");
    Session session = Session.getInstance(props, null);

    try {
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom();
        msg.setRecipients(Message.RecipientType.TO,
                          "ex@gmail.com");
        msg.setSubject("JavaMail hello world example");
        msg.setText("Hello, world!\n");
        Transport.send(msg);
    } catch (MessagingException mex) {
        System.out.println("send failed, exception: " + mex);
    }
  }
} 

ログの例外は

送信に失敗しました、例外:javax.mail.MessagingException:SMTPホストに接続できませんでした:smtp.gmail.com、ポート:25; ネストされた例外は次のとおりです。java.net.ConnectException:接続が拒否されました:接続

4

2 に答える 2

4

mail.smtp.portプロパティに重複のタイプミスがあるため、a を設定していませんmail.smtp.host。したがって、例外に詳述されているように、デフォルトのポート 25 が使用されています。

GMail の SMTP がポート 25 で実行されていないため、接続が拒否されています。メール クライアントで POP をセットアップするから、465 または 587 である必要があるように見えるため、有効な値がありますが、プロパティ キーが正しくありません。

編集:

ポートの正しいプロパティ キーを使用する必要があります。

props.put("mail.smtp.port", "465"); // <-- use the word "port", not "host"

javax.mail.Authenticatorこれが修正された後、質問のコードを意図的に省略していない限り、コメントに既に記載されているように、認証の問題も見つかる可能性があります。

編集2:

前述したように、SMTP サーバーで正常に認証および承認されるには、追加のプロパティを指定する必要がある場合があります。次に例を示します。

props.put("mail.smtp.starttls.enable", "true");

ただし、SSL 接続にポート 465 を使用しているため、mail.smtp.socketFactory.class.

于 2012-10-12T12:59:23.180 に答える