java mail Received fatal alert: handshake_failure java 無法發送郵件問題 java 發送qq郵件(含源碼)


 java 無法發送郵件問題 java 發送qq郵件 報錯:java mail Received fatal alert: handshake_failure (使用ssl)

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
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
    at javax.mail.Service.connect(Service.java:295)
    at javax.mail.Service.connect(Service.java:176)
    at com.gzbugu.common.tools.ext.StringUtil.main(StringUtil.java:524)
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at sun.security.ssl.Alerts.getSSLException(Unknown Source)
    at sun.security.ssl.Alerts.getSSLException(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.recvAlert(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:507)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
    ... 4 more

找了半天終於解決了:

 

 

換掉本地jdk(安裝目錄jre\lib\security里的local_policy.jar,US_export_policy.jar)里面有一個jce的包,安全性機制導致的訪問https會報錯。

如本人安裝的jdk需要替換的地方:1. C:\Program Files\Java\jdk1.8.0_102\jre\lib\security  2. C:\Program Files\Java\jre1.8.0_102\lib\security

下載地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

目錄 %JAVA_HOME%\jre\lib\security里的local_policy.jar,US_export_policy.jar

源碼:


     public static void main(String[] args) {
         try {
  
             //這里使用的是qq郵箱發送
        String email="xxxxxxx@qq.com";
        String pwd="cgXXXXwqfaakcjgf";//非QQ郵箱密碼;是qq郵箱安全碼
        
        String toemail="xxxxxx@qq.com";//接收的郵箱
     
         Properties props = new Properties();
     
              
         // 開啟debug調試
         props.setProperty("mail.debug", "true");
         // 發送服務器需要身份驗證
         props.setProperty("mail.smtp.auth", "true");
         // 設置郵件服務器主機名
         props.setProperty("mail.host", "smtp.qq.com");
         // 發送郵件協議名稱
         props.setProperty("mail.transport.protocol", "smtp");
       
         props.put("mail.smtp.socketFactory.port", "465");
         props.put("mail.smtp.port", "465");
         props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
 
 
       
         MailSSLSocketFactory sf = new MailSSLSocketFactory();
         sf.setTrustAllHosts(true);
         props.put("mail.smtp.ssl.enable", "true");
         props.put("mail.smtp.ssl.socketFactory", sf);
        
         Session session = Session.getInstance(props);
        session.setDebug(true);
         Message msg = new MimeMessage(session);
         msg.setSubject("http://www.cnblogs.com/qgc88");
         StringBuilder builder = new StringBuilder();
         builder.append("http://www.cnblogs.com/qgc88 " );
         builder.append("http://www.cnblogs.com/qgc88");
         builder.append("\n時間 " + new Date());
         msg.setText(builder.toString());
         msg.setFrom(new InternetAddress(email));//"**發送人的郵箱地址**"
     
         Transport transport = session.getTransport();
         transport.connect("smtp.qq.com", email, pwd);
     
         transport.sendMessage(msg, new Address[] { new InternetAddress(toemail) });//"**接收人的郵箱地址**"
         transport.close();
         
        } catch (Exception e) {
        e.printStackTrace();
        }
       }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM