利用jmail qq邮箱发邮件 报错 解决方法

来源:互联网 发布:java 正则替换 编辑:程序博客网 时间:2024/04/28 05:35

利用java的jmail,登录qq邮箱发邮件时遇到下面几个问题,分享一下解决方法。

1. qq需要使用ssl 

解决方法:使用有ssl安全认证的代码

<span style="font-family:SimSun;">public void setSSLSecurity(){        String SSL_FACTORY="javax.net.ssl.SSLSocketFactory";        props.setProperty("mail.smtp.host","smtp.qq.com") ;        props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);        props.setProperty("mail.smtp.socketFactory.fallback", "false") ;        props.setProperty("mail.smtp.port","465") ;        props.put("mail.smtp.starttls.enable","true");        props.setProperty("mail.smtp.socketFactory.port","465") ;        props.setProperty("mail.smtp.auth","true") ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   MailSSLSocketFactory sf = null;        try {            sf = new MailSSLSocketFactory();            sf.setTrustAllHosts(true);        } catch (GeneralSecurityException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        // also use following for additional safety        props.put("mail.smtp.ssl.socketFactory", sf);    }</span>


2. qq开启smtp,用jmail需要使用授权码用做授权 

解决方法:

进入QQ邮箱-》设置-》账户-》POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务-》生成授权码。生成的授权码作为你qq邮箱的密码


3. jdk版本问题导致ssl握手失败的解决方法

运行时提示:

Mail server connection failed; nested exception is 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

解决方法:

jdk版本问题导致的,jdk1.8里面有一个jce的包,安全性机制导致的访问https会报错,官网上有替代的jar包,如果替换掉就可以了。这两个jar包的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html


0 0
原创粉丝点击