JavaMail 发送邮件失败
问题描述
用java 实现一个 发送邮件的Demo(用的是QQ邮箱) 但发送总是失败,QQ邮箱中的 Smtp 服务也都开启了,密码用的是获取的授权码
public static void main(String[] args) { // 收件人电子邮箱 String to = '123@qq.com'; // 发件人电子邮箱 String from = '456@qq.com'; // 指定发送邮件的主机为 smtp.qq.com String host = 'smtp.qq.com'; //QQ 邮件服务器 // 获取系统属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty('mail.smtp.host', host); properties.put('mail.smtp.auth', 'true'); properties.put('mail.smtp.port', '465'); properties.put('mail.smtp.socketFactory.port', '465'); properties.put('mail.smtp.socketFactory.class', 'javax.net.ssl.SSLSocketFactory'); properties.put('mail.smtp.starttls.enable', 'true'); properties.put('mail.smtp.socketFactory.fallback', 'false'); properties.put('mail.smtp.starttls.enable', 'true'); properties.put('mail.smtp.ssl.trust', 'smtp.qq.com'); // 获取默认session对象 Session session = Session.getDefaultInstance(properties,new Authenticator(){ public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication('456@qq.com', '123123'); //发件人邮件用户名、密码 } }); session.setDebug(true); try{ // 创建默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // Set From: 头部头字段 message.setFrom(new InternetAddress(from)); // Set To: 头部头字段 message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // Set Subject: 头部头字段 message.setSubject('This is the Subject Line!'); // 设置消息体 message.setText('This is actual message'); // 发送消息 Transport.send(message); System.out.println('Sent message successfully....from w3cschool.cc'); }catch (MessagingException mex) { mex.printStackTrace(); } }
错误提示DEBUG SMTP: trying to connect to host 'smtp.qq.com', port 465, isSSL falsejavax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465; nested exception is:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1972)at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:642)at javax.mail.Service.connect(Service.java:317)at javax.mail.Service.connect(Service.java:176)at javax.mail.Service.connect(Service.java:125)at javax.mail.Transport.send0(Transport.java:194)at javax.mail.Transport.send(Transport.java:124)at com.syx.email.MailTest3.main(MailTest3.java:68)
有没有做过类似的大神指点一下 …^.^…
问题解答
回答1:SSL数字证书问题,简单点去掉数字证书验证试试 properties.put('mail.smtp.ssl.trust', 'smtp.qq.com'); // 这行先注释调
相关文章:
1. javascript - H5页面怎么查看console信息?2. dockerfile - [docker build image失败- npm install]3. docker内创建jenkins访问另一个容器下的服务器问题4. docker不显示端口映射呢?5. mysql - 索引过滤性不好是由什么原因引起的,应该怎么解决6. android - Listview模仿朋友圈点赞的TextView没有刷新?7. 网页爬虫 - Python:爬虫的中文编码问题?8. javascript - vue生成一维码?求助!!!!!急9. javascript - 修改表单多选项时和后台同事配合的问题。10. angular.js - angularjs 怎么封装 upload 上传
