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. docker绑定了nginx端口 外部访问不到2. java - 为什么此私有静态变量能被访问呢?3. angular.js - angular内容过长展开收起效果4. docker容器呢SSH为什么连不通呢?5. nignx - docker内nginx 80端口被占用6. docker - 各位电脑上有多少个容器啊?容器一多,自己都搞混了,咋办呢?7. docker网络端口映射,没有方便点的操作方法么?8. php - mysql 模糊搜索问题9. dockerfile - 我用docker build的时候出现下边问题 麻烦帮我看一下10. php - 第三方支付平台在很短时间内多次异步通知,订单多次确认收款
