JavaMail mail.smtp.ssl.enable无效

时间:2010-01-11 10:23:08

标签: java ssl javamail

我在几个网站上读到,使用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. 使用debug(props.put("mail.debug", "true"))时,我看到“isSSL false”
  3. (我上面也试过添加props.put("mail.smtp.auth","true") +用户/密码....)

    任何想法我做错了什么?

5 个答案:

答案 0 :(得分:14)

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

将协议从SMTP更改为SMTPS
trnsport = session.getTransport("smtp");

trnsport = session.getTransport("smtps");

答案 1 :(得分:7)

形成Java Doc

  

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

答案 2 :(得分:4)

尝试

props.put("mail.smtp.auth", "true");
props.setProperty("mail.smtp.**ssl.enable", "true");
props.setProperty("mail.smtp.**ssl.required", "true");

答案 3 :(得分:2)

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

更新:我正在查看公共电子邮件代码,并看到以下这些内容:

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

所以,也要尝试这些属性。

答案 4 :(得分:2)

这是来自JavaMail的SSLNOTES文档(强调添加):

  

首先,也许最简单的方法是设置一个属性来启用   SSL例如,要启用SSL进行SMTP连接,请进行设置   财产" mail.smtp.ssl.enable" to" true"。

     

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

     

- STARTTLS支持

     

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

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