web-dev-qa-db-ja.com

JavaMailmail.smtp.ssl.enableが機能していません

JavaMail APIを使用するときに、プロパティ_mail.smtp.ssl.enable_をtrueに設定するいくつかのサイトを読みました。私は次のようないくつかのコードを持っています:

_props.put("mail.smtp.Host", "exchangemail1.example.com");
props.put("mail.from", "[email protected]");
props.put("mail.smtp.starttls.enable", "true");
// I tried this by itself and also together with ssl.enable)
props.put("mail.smtp.ssl.enable", "true");

Session session = Session.getInstance(props, null);
MimeMessage msg = new MimeMessage(session);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO, "[email protected]");  
    // also tried @gmail.com
msg.setSubject("JavaMail ssl test");
msg.setSentDate(new Date());
msg.setText("Hello, world!\n");
props.put("mail.smtp.auth", "false");

Transport trnsport;
trnsport = session.getTransport("smtp");
trnsport.connect();
msg.saveChanges(); 
trnsport.sendMessage(msg, msg.getAllRecipients());
trnsport.close();
_

これによりメールが送信されますが、次のようになります。

  1. トラフィックキャプチャを実行すると、暗号化されていないことがわかります
  2. Debug(props.put("mail.debug", "true"))を使用すると、「isSSLfalse」が表示されます

(上記でprops.put("mail.smtp.auth","true") + user/password ....を追加してみました。)

私が間違っていることについて何か考えはありますか?

11
user247953

SSLを使用するには、プロトコルを [〜#〜] smtp [〜#〜] から [〜#〜] smtps [〜#〜] に変更する必要があります。

trnsport = session.getTransport("smtp");

trnsport = session.getTransport("smtps");
15
xplanner expert

フォーム Java Doc

「smtps」プロトコルを使用してSMTPover SSLにアクセスしている場合、すべてのプロパティの名前は「mail.smtps。*」になることに注意してください。

7
Ralph

試してみてください

props.put("mail.smtp.auth", "true");
props.setProperty("mail.smtp.**ssl.enable", "true");
props.setProperty("mail.smtp.**ssl.required", "true");
4
Visruth

Apacheを使用することをお勧めします commons-email 。最もよく使用されるプロパティ(SSL/TLSを含む)のセッターがあり、使いやすく、JavaMailAPIの上にあります。

更新:私はcommons-emailコードを見ていて、次の行を見ました:

properties.setProperty("mail.smtp.starttls.enable", this.tls);
properties.setProperty("mail.smtp.auth", "true");

したがって、これらのプロパティも試してみてください。

3
Bozho

これは [〜#〜] sslnotes [〜#〜] JavaMailのドキュメントからのものです(強調を追加):

まず、おそらく最も簡単なのは、SSLの使用を有効にするプロパティを設定することです。たとえば、SMTP接続でSSLの使用を有効にするには、プロパティ "mail.smtp.ssl.enable"を "true"に設定します。

または、SSL対応プロトコル名のいずれかを使用するようにJavaMailを構成することもできます。非SSLJavaMailプロトコル「imap」、「pop3」、および「smtp」に加えて、プロトコル「imaps」、「pop3s」、および「smtps」SSL接続を使用して対応するサービスに接続するために使用できます。

-STARTTLSサポート

STARTTLSサポートは、標準の「imap」および「smtp」プロトコルで使用できますが、適切なプロパティmail.imap.starttls.enableまたはmail.smtp.starttlsを設定して有効にする必要があります。 enable、「true」に。設定すると、サーバーがSTARTTLSコマンドをサポートしている場合、接続を確立した後、ログイン情報を送信する前に使用されます。

したがって、STARTTLSサポートを使用する場合、プロトコルをsmtpsに設定する必要はないようです。

2
lanoxx