JavaMail mail.smtp.ssl.enable不工作
我在几个网站上读到,当使用JavaMail API时,将属性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
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();
这会发送电子邮件,但:
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");