我在几个网站上读到,使用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();
这会发送电子邮件,但是:
props.put("mail.debug", "true")
)时,我看到“isSSL false”(我上面也试过添加props.put("mail.smtp.auth","true")
+用户/密码....)
任何想法我做错了什么?
答案 0 :(得分:14)
要使用SSL,您应该通过更改
将协议从SMTP更改为SMTPStrnsport = 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
。