通过 TLS 的 Java 邮件

标签 java email ssl

我正在尝试通过 TLS 连接从我的程序发送电子邮件。这是我的代码

    final String username = "XXXXXX";
    final String password = "XXXXX"; 
    Properties props = new Properties();
    props.put("mail.transport.protocol", "smtp");
    props.put("mail.smtp.starttls.enable","true");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.host", "mail.xxxx.com");
    props.put("mail.smtp.port", "587");

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

    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("from@xxxx.com"));
    message.setRecipients(Message.RecipientType.TO,
        InternetAddress.parse(to_address));
    message.setSubject("Test Mail"); 
    message.setText("TestMail ");
    Transport.send(message)

我的电子邮件网关在端口 587 上启用了启用 SSL 的传入邮件设置和启用了 TLS 的传出邮件设置。我能够在 Outlook 中配置此设置并且工作正常。但是通过我的java程序,它说“连接被拒绝”。 帮助表示赞赏!

终于成功了:

我使用了 InstallCert导入证书以生成 jssecacerts 文件的程序,我将该文件添加到我的/jre/lib/security/路径中。这是我的工作代码

    properties.put("mail.transport.protocol", "smtp");
    properties.put("mail.smtp.host", "XXXXXX");  
    properties.put("mail.smtp.port", "465"); 
    properties.put("mail.smtp.ssl.enable", true);
    properties.put("mail.smtp.socketFactory.port", "465");
    properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
    properties.put("mail.smtp.socketFactory.fallback", "false"); 
    properties.put("mail.smtp.quitwait", "false"); 
    properties.put("mail.smtp.auth", "true"); 

最佳答案

您需要使用smtps 协议(protocol)而不是smtp

props.put("mail.transport.protocol", "smtps");
props.put("mail.smtps.starttls.enable","true");
props.put("mail.smtps.auth", "true");
props.put("mail.smtps.host", "mail.xxxx.com");
props.put("mail.smtps.port", "587");

您也可以尝试专门为 rfc822 设置协议(protocol),这有时会有所帮助

props.put("mail.transport.protocol.rfc822", "smtps");

关于通过 TLS 的 Java 邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13834768/

相关文章:

python - 测试电子邮件发送? -Python/Django

email - 从Heroku上的Grails 2.0应用程序使用Sendgrid发送邮件

curl - SSL 证书问题 : CN entry doesn't match with hostname in URL

java - 在 java 中创建 Base64 字符串时内存不足?

java - 什么是10001st质数?为什么我的Java解决方案会给出错误ArrayIndexOutOfBoundsException?

python - 如何从 Python 发送 header 中包含姓名的电子邮件

ubuntu - 在 EC2 Ubuntu 实例上安装 COMODO EV SSL 证书

maven - Grizzly 服务器中止了 SSL 握手

java - Java Android 中的 cURL XML REST POST

java - Android:使用 fragment 事务获取白屏