当前位置: 首页 > 知识库问答 >
问题:

Java邮寄逻辑:无法将套接字转换为TLS

仇承志
2023-03-14

在一个应用程序中,我使用java实现了邮件发送逻辑。我使用了smtp.gmail。com587端口,具有有效的gmail id和密码。在开发环境中,一切正常。但在生产环境中,我需要使用不同的邮件服务器,例如smtp.xyz。在端口25上输入有效的电子邮件id和密码。

当我继续使用以下代码启用SSL时:

我出错了

无法将套接字转换为TLS

SunCertPathBuilderException:无法找到请求目标的有效证书路径

=======================================================

final ResourceBundle rsbd=ResourceBundle.getBundle("main/ResourceBundle/Dyna");

        // -- Attaching to default Session, or we could start a new one                                            

                    props.put("mail.smtp.host", smtpServer);

                props.put("mail.smtp.auth", "true");

                props.put("mail.debug", "true");

            props.put("mail.smtp.port", port); 

                props.put("mail.smtp.starttls.enable","true");

            props.put("mail.smtp.EnableSSL.enable","true");

  Session session =Session.getInstance(props, new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(admin_mail, admin_password);}});

         // -- Create a new message --
      Message msg = new MimeMessage(session);

     // -- Set the FROM and TO fields --
      msg.setFrom(new InternetAddress(from));

      msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email, false));

      msg.setSubject(subject);
      msg.setText(emailContent);

      // -- Set some other header information --
      msg.setHeader("X-Mailer", "LOTONtechEmail");
      msg.setSentDate(new Date());

        // -- Send the message --
        Transport.send(msg);

当我删除EnableSSL并尝试添加以下代码时:

(获取javax.mail.AuthenticationFailedException:535 5.7.3身份验证失败)

==========================================================================

props.put("mail.smtp.socketFactory.port","25");

  props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

  props.put("mail.smtp.socketFactory.fallback", "true");


  MailSSLSocketFactory sf=new MailSSLSocketFactory();

  sf.setTrustAllHosts(true);

  props.put("mail.smtp.ssl.socketFactory", sf);

在过去3天的谷歌搜索中,我了解到我需要像这里给出的那样配置可信证书。

但是我想在不加密和不抢劫的情况下继续启用SSL。有没有办法通过我们自己的域通过java程序发送电子邮件而不启用SSL。任何帮助都将不胜感激。


共有3个答案

顾曾笑
2023-03-14

我发现我们也必须设置正确的TLS版本,否则我们可能会得到同样的错误。下面的属性设置有助于解决问题。

<props>
    <prop key="mail.smtp.auth">true</prop>
    <prop key="mail.smtp.starttls.enable">true</prop>
    <prop key="mail.smtp.ssl.protocols">TLSv1.2</prop>
    <prop key="mail.smtp.ssl.trust">mail.XyZ.com</prop>
</props>
廖绍辉
2023-03-14

如果您正在使用

        props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");

请删除此代码段,以避免从SMTP服务器进行SSL配置。

阎志义
2023-03-14

是否需要SSL/TLS由邮件服务器控制。如果需要,你必须使用它。

您可以设置mail.smtp.ssl。信任属性以忽略证书问题,或者您可以按照JavaMail常见问题解答中的描述修复它。

 类似资料:
  • 我有另一个转换套接字异常。Stackoverflow将我和相关答案联系起来,我已经做了人们建议的所有事情。 这里有异常描述: 线程“main”javax中出现异常。邮政MessaginException:无法将套接字转换为TLS;嵌套的例外是:java。网SocketException:java。安全NoSuchAlgorithmException:在com上构造实现时出错(算法:Default,

  • 我用Javax发送邮件有问题。我们使用gmail大约4年了,用我们的Java软件发送邮件。现在我得到了以下错误: 以下是我的gmail设置: 我还尝试了其他邮件服务器(O365、Strato),但收到了相同的错误。

  • 我在使用Apache Commons Mail连接到SMTP服务器时遇到问题。我已经尝试了所有方法,但我唯一能在网上找到的是Java邮件。这是我的错误: 原因:javax.mail.MessagingException:无法将套接字转换为TLS;嵌套异常是:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorExc

  • 我正在尝试通过Gmail SMTP服务器使用JavaMail发送电子邮件。代码如下: 返回此错误: 无法将套接字转换为TLS; 完整的堆栈跟踪: 异常线程"main"javax.mail.RuntimeException:ervice.connectMessagingException:无法将套接字转换为TLS;嵌套异常是:ervice.java:176SSLHandshakeException:

  • 我收到了错误:org.springframework.mail。MailSendException:邮件服务器连接失败;嵌套的异常是javax.mail。MessaginException:无法将套接字转换为TLS;嵌套的异常是:javax.net.ssl。SSLHandshakeException:没有合适的协议(协议被禁用或密码套件不合适)。失败的消息:javax.mail。MessaginE

  • 我想通过单击JFrame netbeans中的按钮将邮件从我的电子邮件地址发送到另一个电子邮件地址。这是代码, 但它给了我以下错误, javax.mail.MessagingException:无法将套接字转换为TLS;嵌套异常是:java.io.lOException:使用SSL套接字工厂类启动TLS中的异常null: host, portsmtp.gmail.com,587;异常:java.l