是starttls.enabled = true对于从java代码发送邮件是否安全?

时间:2013-08-20 11:15:25

标签: java email ssl smtp

我正在从java代码发送电子邮件。我的配置是

 props.put("mail.smtp.starttls.enable", "true");
 props.put("mail.smtp.host", "****"); 
 props.put("mail.smtp.auth", "true");
 props.put("mail.smtp.port", "587");

other question EJP回复

  

在STARTTLS之后,任何使用STARTTLS的协议都处于SSL模式   发出命令

但是我的调试输出显示:DEBUG SMTP:尝试连接到主机“****”,端口587,isSSL false。

所以我的问题听起来像是

这样的配置是否真的安全并使用SSL作为EJP,尽管我的调试输出中的isSSL = false?

更新

连接代码

 Transport transport = session.getTransport("smtp");
 transport.connect("host", 587,"username", "password");

当我写Transport transport = session.getTransport("smtps")时,我得到了

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection

2 个答案:

答案 0 :(得分:0)

你仍然应该使用'smtp'传输,因为这是协议(smtps不是一个已知的协议)。 SSL用于连接。 我自己将'javax.mail'与Google结合使用。 Google只允许使用SSL。所以我只能回答是;它有效,而且很安全。 我应该补充说,属性'mail.smtp.starttls.enable'有点令人困惑。 startsll属性是指正在发出的命令,但它应该被命名为:'mail.smtp.secure.enable'。

答案 1 :(得分:0)

设置mail.smtp.starttls.required = true 这可确保使用TLS或连接不会发生 参考:https://javamail.java.net/nonav/docs/api/com/sun/mail/smtp/package-summary.html