11

我在几个站点上读到,当使用 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();

这会发送电子邮件,但是:

  1. 当我进行流量捕获时,我看到它没有加密
  2. 使用调试(props.put("mail.debug", "true"))时,我看到“isSSL false”

(我也尝试在上面添加props.put("mail.smtp.auth","true")+用户/密码....)

任何想法我做错了什么?

4

5 回答 5

17

要使用 SSL,您应该通过更改将协议从SMTP更改为SMTPS

trnsport = session.getTransport("smtp");

trnsport = session.getTransport("smtps");
于 2011-01-15T18:16:08.907 回答
7

形成Java 文档

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

于 2011-05-30T12:34:02.167 回答
4

尝试

props.put("mail.smtp.auth", "true");
props.setProperty("mail.smtp.**ssl.enable", "true");
props.setProperty("mail.smtp.**ssl.required", "true");
于 2013-07-02T11:16:19.473 回答
3

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

更新:我正在查看 commons-email 代码,并看到了这些行:

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

所以,也试试这些属性。

于 2010-01-11T16:21:49.040 回答
2

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

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

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

-- STARTTLS 支持

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

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

于 2016-09-05T15:20:12.603 回答