java - 获取 PKIX 路径构建失败

标签 java jakarta-mail

我正在尝试使用java通过gmail发送邮件 但我遇到了一些异常(exception) 代码如下:

 public static void send_java_mail() throws IOException
{
    System.out.println("\n\n\n\nIn send_java_mail");
    String[] recipents=new String[10];
    recipents[0]=email_id;//email_id;       
    //put your smtp details in the properties file.Following given are for gmail account

    Properties smtp_properties =null;
    smtp_properties = new Properties();
    InputStream iss = new FileInputStream("D:\\Heat\\Web\\smtpconfig.properties");
    smtp_properties.load(iss);


    String e_mailbody="Hi\n\tYour Order has been Placed.It will deliever in 2 Days.\n\n\tYour Name :"+CustomerName+"\n\tYour Email Address :"+email_id+"\n\tYour Shipping Address :"+Addr+"\n\tYour Contact Number:"+Phone+"\n\tYour Total amount to be Pay is 3610.\nThanks.";
    String host = smtp_properties.getProperty("host");
    String mail_transport_protocol = smtp_properties.getProperty("mail.transport.protocol");
    String mail_smtp_auth =smtp_properties.getProperty("mail.smtp.auth");
    String mail_smtp_port = smtp_properties.getProperty("mail.smtp.port");
    String mail_debug =smtp_properties.getProperty("mail.debug");
    String mail_smtp_socketFactory_port =smtp_properties.getProperty("mail.smtp.socketFactory.port");
    String mail_smtp_socketFactory_class =smtp_properties.getProperty("mail.smtp.socketFactory.class");
    String mail_smtp_socketFactory_fallback = smtp_properties.getProperty("mail.smtp.socketFactory.fallback");

    Properties props = System.getProperties();
    System.out.println("mail transport protocol :"+mail_transport_protocol);
    props.setProperty("mail.transport.protocol",mail_transport_protocol);     
    props.setProperty("mail.host", host);  
    props.put("mail.smtp.auth", mail_smtp_auth);  
    props.put("mail.smtp.port", mail_smtp_port);  
    props.put("mail.debug", mail_debug);
    props.setProperty("mail.smtp.ssl.enable", "true");
    props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", mail_smtp_socketFactory_port);  
    props.put("mail.smtp.socketFactory.class",mail_smtp_socketFactory_class);  
    props.put("mail.smtp.socketFactory.fallback", mail_smtp_socketFactory_fallback);  

    final String from="dhanshreeherballife@gmail.com";
    final String pass="D@ny1996";

    Session session = Session.getDefaultInstance(props,  new javax.mail.Authenticator() {    
        protected PasswordAuthentication getPasswordAuthentication() {    
            return new PasswordAuthentication(from,pass);  
            }    
           });  
    MimeMessage message = new MimeMessage(session);

    try {
        message.setFrom(new InternetAddress(from));
        InternetAddress[] toAddress = new InternetAddress[recipents.length];

            toAddress[0] = new InternetAddress(recipents[0]);

            message.addRecipient(Message.RecipientType.TO, toAddress[0]);


            message.setSubject("Order");
        message.setText(e_mailbody);
        Transport transport = session.getTransport("smtp");

        transport.connect(host, from, pass);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }
    catch (AddressException ae) {
        ae.printStackTrace();
    }
    catch (MessagingException me) {
        me.printStackTrace();
    }               
}

异常情况如下:

DEBUG SMTP: exception reading response: 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
javax.mail.MessagingException: Exception reading response;
  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.readServerResponse(SMTPTransport.java:1090)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:986)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:197)
    at javax.mail.Service.connect(Service.java:233)
    at javax.mail.Service.connect(Service.java:134)
    at Servlets.Sendmail.send_java_mail(Sendmail.java:92)
    at Servlets.PlaceOrder.doGet(PlaceOrder.java:64)
    at Servlets.PlaceOrder.doPost(PlaceOrder.java:72)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

最佳答案

首先修复所有这些 common JavaMail mistakes .

JavaMail 常见问题解答有 more information on cert path errors 。如果您在连接到 Gmail 时遇到此错误,很可能是您的防火墙或防病毒产品拦截了连接并提供了自己的证书而不是 Gmail 证书。在使用上面链接中的任何技术禁用安全检查之前,您应该仔细考虑允许该软件监视您的连接的安全影响。

您还应该检查您的 JDK 安装是否配置错误或损坏。也许您的应用程序服务器正在覆盖 JDK 附带的 cacerts 文件(信任存储)。

关于java - 获取 PKIX 路径构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50001206/

相关文章:

javamail-删除横幅图像的附件

java - 无法使用 JavaMail 读取 Outlook 邮件,而 Gmail 可以使用

java - 如何通过编程设置下一个要执行的Action的FormBean?

java - com.sun.HttpServer 套接字积压

java - 无法在 BroadcastReceiver 中实例化接收器

java - maven原型(prototype)中资源的相关路径

java - Transport.send(msg) 不起作用

java - 为什么我收到 AttachFile(File) is undefined for the type MimeBodyPart?

JavaMail 无法发送电子邮件

java - 遍历 ArrayList<T> java?