java - 使用 SSL 发送电子邮件在我的 Java 应用程序中不起作用,TLS 起作用

标签 java ssl jakarta-mail

这是 SendMailTLS.java。 这项工作。

    Properties props = new Properties();

    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");     

    props.put("mail.smtp.starttls.enable", "true");
    //props.put("mail.smtp.ssl.trust", "smtp.gmail.com"); //if avast is enabled

    Session session = Session.getInstance(props,
      new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });

    try {

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(username));
        message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse(recipient));
        message.setSubject("TLS");
        message.setText("TLS");

        Transport.send(message);

        System.out.println("Done");

    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }

这是 SendMailSSL.java。 这行不通。

Properties props = new Properties();

    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "465");

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

    Session session = Session.getInstance(props,
      new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });

    try {

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(username));
        message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse(recipient));
        message.setSubject("SSL");
        message.setText("SSL");

        Transport.send(message);

        System.out.println("Done");

    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }

两个类都导入:

    import java.util.Properties; 
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;

我不明白代码的作用,如果有人能帮我解释一下。我在 SSL 文件中做错了什么吗?如果我使用的是 java 邮件 API,我是否需要担心 TLS 版本?

最佳答案

首先修复这些 common mistakes .然后解释“不起作用”是什么意思,也许包括 JavaMail debug output .

由于您无法弄清楚如何修复 common mistakes你自己,尝试将代码更改为:

Properties props = new Properties();

props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");

Session session = Session.getInstance(props, null);
session.setDebug(true);

try {

    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress(username));
    message.setRecipients(Message.RecipientType.TO,
        InternetAddress.parse(recipient));
    message.setSubject("SSL");
    message.setText("SSL");

    Transport.send(message, username, password);

    System.out.println("Done");

} catch (MessagingException e) {
    System.out.println(e);
    throw new RuntimeException(e);
}

如果这不起作用,请发布 debug output (在上面启用)并尝试 connection debugging tips并报告结果。

关于java - 使用 SSL 发送电子邮件在我的 Java 应用程序中不起作用,TLS 起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29725873/

相关文章:

java - 如何使用 Java(Apache HTTP 客户端)模拟浏览器 HTTPS POST 请求?

android - Web 服务、Android 客户端、SSL

java - 在java-mail中图像被转换为​​.bin文件

jakarta-mail - 从javamail中的文件夹中删除消息

java - 正则表达式在以特定字符开头和结尾的字符串中查找多个匹配项

java - 十六进制字符串到int数组的转换

vb.net - ASP.NET "The request was aborted: Could not create SSL/TLS secure channel"也与配置的 servicepointmanager 一起出现

ssl - TLS 记录协议(protocol)如何重组接收到的数据?

android - 使用 java 邮件 API 或任何其他语言发送批量邮件,而无需在服务器上存储用户密码

java - 为什么 AbstractQueuedSynchronizer 在获取锁时中断