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

javax.mail.MessagingException:无法将套接字转换为JAVA中的TLS异常

太叔京
2023-03-14

我想通过单击JFrame netbeans中的按钮将邮件从我的电子邮件地址发送到另一个电子邮件地址。这是代码,

import java.awt.HeadlessException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.swing.JOptionPane;
import com.sun.mail.util.MailSSLSocketFactory;
import java.io.File;
import javax.mail.PasswordAuthentication;
import javax.mail.*;
import javax.swing.JFileChooser;

    private void btn_sendActionPerformed(java.awt.event.ActionEvent evt) {                                         
    final String From = txt_from.getText();
    final String password = txt_password.getText();
    String To = txt_to.getText();
    String subject = txt_sub.getText();
    String txtmessage = txt_body.getText();

    Properties props = new Properties();


    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "587");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLsocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "587");
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.fallback", "true");
    props.put("mail.smtp.ssl.socketFactory", "true");
    props.put("mail.smtp.EnableSSL.enable","true");

    Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {

                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(From, password);
                }
            }
    );


    try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(From));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(To));
        message.setSubject(subject);

        MimeBodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setText(txtmessage);
        Multipart multiPart = new MimeMultipart();
        multiPart.addBodyPart(messageBodyPart);


        messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(attachment_path);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(txt_DocAttach.getText());
        multiPart.addBodyPart(messageBodyPart);

        message.setContent(multiPart);

        Transport.send(message);
        JOptionPane.showMessageDialog(rootPane, "Message is sent");
    } catch (MessagingException | HeadlessException e) {
        JOptionPane.showMessageDialog(rootPane, e);
    }

}

但它给了我以下错误,

javax.mail.MessagingException:无法将套接字转换为TLS;嵌套异常是:java.io.lOException:使用SSL套接字工厂类启动TLS中的异常null: host, portsmtp.gmail.com,587;异常:java.lang.ClassNotFoundException:javax.netssl.SSLocketFactory

尝试了很多,但不知道如何解决?请帮忙。

共有3个答案

许寒
2023-03-14

如果您的JavaMail库(mail.jar或javax.mail.jar)太旧,也会弹出此错误。从此处下载最新版本:https://javaee.github.io/javamail/

国晟睿
2023-03-14

正如其他人所指出的,您的套接字出厂设置是错误的。

更重要的是,你根本不需要设置它们!

贲高寒
2023-03-14

尝试更改mail属性的值。smtp。socketFactory。类到javax。网ssl。SSLSocketFactory,而不是javax。网ssl。SSLsocketFactory,类名区分大小写。

有关连接属性的更多信息,您可以查看:在哪里可以找到所有可用的Java邮件属性?

 类似资料:
  • 我正在使用spring boot的后端,我试图使用smtp向gmail帐户发送电子邮件,但我发现了一些错误。 这是我在本教程之后的代码: 应用属性: 类MailObject。java: 邮件ontroller.java: 电子邮件服务。Java语言 EmailServiceImpl.java 运行时,控制台中没有错误,但当我尝试发送电子邮件时,会出现以下错误: 我不明白为什么我会犯这个错误:有什么

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

  • 我正在尝试通过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

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

  • 问题内容: 我编写了以下代码,用于通过SMTP作为TLS使用javamail API通过SMTP发送电子邮件,因为不支持SSL,但最终出现以下异常。请在下面查看我的代码。我使用了调试模式,在代码下面也可以找到异常。 异常跟踪 谁能帮我调试一下吗?提前致谢! 问题答案: 我通过评论以下属性解决了这个问题 并且代码执行时没有错误或警告,或者只是从上述源代码中删除了这一行。到现在为止,它就像是一种魅力。