JavaMailがqqメールボックスにメールを送信する過程で出会った問題と解決方法

1835 ワード

今日javamailを使ってqqメールボックスにメールを送る過程で、いくつかの問題に遭遇しました.
 
ネット上のコードで書き始めたばかりです
//        
Properties prop = new Properties();
prop.setProperty("mail.smtp.host", "smtp.qq.com");    //   ,        
prop.setProperty("mail.transport.protocol", "smtp");
prop.put("mail.smtp.auth", true);    //    true          "true",    .....
prop.setProperty("mail.smtp.port", "465");

Session session = Session.getDefaultInstance(prop, new Authenticator() {
	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication("[email protected]", "xxxxx");
	}
});
session.setDebug(true);    //       

MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("xx");
message.setText("xxx");

Transport.send(message);

上のコードは运行する时qqメールボックスのサーバーにつながっていないで、qqメールボックスはsslプロトコルを采用したため、上は1行プラスしなければなりません
prop.put("mail.smtp.ssl.enable", "true");   //   ssl

 
jdk 8の実行時に、次のような異常が発生します.
javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465;
  nested exception is:
	javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
	......
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
	

調べたところ、この問題が発生したのはjdk 8のセキュリティメカニズムの問題で、具体的にはjdk_を参照してください.jce,
置換するリソースのダウンロードアドレス:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
 
上書きする前にjdkの元のファイルをバックアップしてください.
 
JAvamail mavenアドレス:http://mvnrepository.com/artifact/javax.mail/mail