JavaMail failed to send email
世界只因有你
世界只因有你 2017-05-17 10:00:14
0
1
722

Use java to implement a demo for sending emails (using QQ mailbox), but the sending always fails. The Smtp service in QQ mailbox is also enabled, and the password is the obtained authorization code

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();
          }
    }
    

Error message
DEBUG SMTP: trying to connect to host "smtp.qq.com", port 465, isSSL false
javax.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 target
at 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)

Have you ever done something similar? Please give me some advice...^.^…

世界只因有你
世界只因有你

reply all(1)
仅有的幸福

SSL digital certificate problem, simply try to remove the digital certificate verification
properties.put("mail.smtp.ssl.trust", "smtp.qq.com"); // Comment this line first

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!