JavaMail mail.smtp.ssl.enable不工作

JavaMail mail.smtp.ssl.enable不工作,java,ssl,jakarta-mail,Java,Ssl,Jakarta Mail,我在几个网站上读到,当使用JavaMail API时,将属性mail.smtp.ssl.enable设置为true。我有一些代码如下: props.put("mail.smtp.host", "exchangemail1.example.com"); props.put("mail.from", "myemail@example.com"); props.put("mail.smtp.starttls.enable", "true"); // I tried this by itself and

我在几个网站上读到,当使用JavaMail API时,将属性
mail.smtp.ssl.enable
设置为true。我有一些代码如下:

props.put("mail.smtp.host", "exchangemail1.example.com");
props.put("mail.from", "myemail@example.com");
props.put("mail.smtp.starttls.enable", "true");
// I tried this by itself and also together with ssl.enable)
props.put("mail.smtp.ssl.enable", "true");

Session session = Session.getInstance(props, null);
MimeMessage msg = new MimeMessage(session);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO, "me.at@example.com");  
    // also tried @gmail.com
msg.setSubject("JavaMail ssl test");
msg.setSentDate(new Date());
msg.setText("Hello, world!\n");
props.put("mail.smtp.auth", "false");

Transport trnsport;
trnsport = session.getTransport("smtp");
trnsport.connect();
msg.saveChanges(); 
trnsport.sendMessage(msg, msg.getAllRecipients());
trnsport.close();
这会发送电子邮件,但:

  • 当我进行流量捕获时,我发现它没有加密
  • 当使用debug(
    props.put(“mail.debug”,“true”)
    )时,我看到“issl false”
  • (我还在上面添加了
    props.put(“mail.smtp.auth”,“true”)
    +用户/密码…)

    知道我做错了什么吗?

    我建议使用Apache。它具有最常用属性(包括SSL/TLS)的设置器,使用起来更友好,并且位于JavaMail API的顶部

    更新:我正在查看commons的电子邮件代码,看到以下几行:

    properties.setProperty("mail.smtp.starttls.enable", this.tls);
    properties.setProperty("mail.smtp.auth", "true");
    

    因此,也可以尝试一下这些属性。

    要使用SSL,您应该通过更改

    trnsport = session.getTransport("smtp");
    

    表格:

    请注意,如果您使用“smtps”协议通过SSL访问SMTP,则所有属性都将命名为“mail.smtps.*”

    试一试

    这是来自JavaMail的文档(重点添加):

    首先,也许是最简单的,是设置一个属性以启用use SSL协议。例如,要启用对SMTP连接使用SSL,请设置 属性“mail.smtp.ssl.enable”设置为“true”

    或者,您可以将JavaMail配置为使用启用了SSL的之一 协议名称。除了非SSL JavaMail协议“imap”, “pop3”和“smtp”,协议“imaps”、“pop3”和“smtps”可以 用于使用SSL连接到相应的服务 连接

    --STARTTLS支持

    STARTTLS支持在标准的“imap”和“smtp”中提供 协议,但必须通过设置适当的属性来启用, mail.imap.starttls.enable或mail.smtp.starttls.enable,设置为“true”。 设置后,如果服务器支持STARTTLS命令,则 在建立连接后和发送任何登录之前使用 信息


    因此,在使用STARTTLS支持时,似乎没有必要将协议设置为
    smtps

    我刚刚实现了通过SSL发送,当我调用session.getTransport(“smtps”)时;它工作正常。因此,这个答案是有效的。这是不推荐的,消息:
    类型传输的静态方法send(message)应该以静态方式访问
    是否有更现代的方式指定
    smtps
    ?根据使用STARTTLS机制,还需要使用
    smtp
    协议。这有点违反直觉。
    smtps
    协议适用于不需要STARTTLS的直接SSL连接。
    trnsport = session.getTransport("smtps");
    
    props.put("mail.smtp.auth", "true");
    props.setProperty("mail.smtp.**ssl.enable", "true");
    props.setProperty("mail.smtp.**ssl.required", "true");