次のコードを使用してメールを送信しようとしています:
...
Security.addProvider(new BouncyCastleProvider());
...
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
...
Transport t = session.getTransport("smtp");
try {
t.connect();
t.sendMessage(message, message.getAllRecipients());
System.out.println("Done");
} finally {
t.close();
}
...
ただし、次の例外がスローされます。
Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not convert socket to TLS;
nested exception is:
java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
プロバイダーを追加しないと問題なく動作しますが、他の問題のためにコードで必要になります。
//Security.addProvider(new BouncyCastleProvider());