2

smtpsサーバーに接続するための非常に基本的な情報の横にあるmail.transportプロパティをsmtpsに設定しました。

    Properties p = new Properties();
    p.put("mail.transport.protocol", "smtps");
    p.put("mail.smtps.host", "smtp.gmail.com");
    p.put("mail.smtps.auth", true);

    Session s = Session.getDefaultInstance(p,new Authenticator(){/*authenticator impl.*/});

    MimeMessage mm = new MimeMessage(s); /*then i set the subject, then the body... */
    mm.setRecipients(RecipientType.TO, "myfakeaddress@gmail.com");

そして今、私は自分のメッセージを送ろうとしています。静的メソッドを試してみたい。instanceメソッドを使用すると、sendMessage正常に機能します。ここにあります:

    Transport.send(mm);

smtpsサーバーではなくsmtpサーバーに接続しようとします。javamailの実装に足を踏み入れると(ところで、私のバージョンは1.4.5です)、失敗するメソッドは次のとおりです。

 transport = s.getTransport(addresses[0]);

;のSMTPTransport代わりにを返すためです。SMTPSSLTransportこれはmail.transport.protocol、コードの2行目にあるように、プロパティをsmtpsに設定した場合でも同様です。私の手順はどこかにバグがありますか、Transport.sendそれとも静的メソッドを介してsmtpsメールを送信することはできませんか?

4

2 に答える 2

3

Transport.send(msg)受信者の種類ごとに、電子メールの受信者に関連付けられているプロトコルを検索しています。

すべての受信者は、タイプInternetAddressを持つ es です。rfc822

rfc822 アドレスに smtps プロトコルを使用するように JavaMail を設定するには、次の 3 つの方法があります。

  1. rfc822=smtpsプロパティ ファイルに行を追加するjavamail.address.mapか、 ( javadocjavamail.default.address.mapで説明されSessionいるように)
  2. インスタンス化されたセッションで ` を呼び出しs.setProtocolForAddress("rfc822", "smtps")ます (JavaMail 1.4 以降が必要)
  3. セッションをインスタンス化するときにプロパティmail.transport.protocol.rfc822を設定しsmtpsます (JavaMail 1.4.3 以降が必要)
于 2014-11-14T18:01:10.443 に答える
2

ビルシャノン(Javamailの現在のメンテナ)はこの質問で提案します

すべてのソケットファクトリプロパティを削除します。かなり新しいバージョンのJavaMailを使用している場合は、それらは必要ありません。GmailにアクセスするようにJavaMailを設定する方法については、JavaMailのFAQを参照してください。それでも機能しない場合は、デバッグのヒントもあります。

また、Session.getDefaultInstanceをSession.getInstanceに変更します。

これがJavamailFAQの関連コードです

String host = "smtp.gmail.com";
String username = "user";
String password = "passwd";

Properties props = new Properties();
props.put("mail.smtps.auth", "true");
props.put("mail.debug", "true");

MimeMessage msg = new MimeMessage(session);
// set the message content here

Transport t = session.getTransport("smtps");

try {
  t.connect(host, username, password);
  t.sendMessage(msg, msg.getAllRecipients());
} finally {
  t.close();
}
于 2012-05-06T15:48:58.333 に答える