使用JavaMail发送邮件时的javax.net.ssl.SSLException

javax.mail.MessagingException: Exception reading response; nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1764) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1523) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:453) at javax.mail.Service.connect(Service.java:313) at javax.mail.Service.connect(Service.java:172) at javax.mail.Service.connect(Service.java:121) at javax.mail.Transport.send0(Transport.java:190) at javax.mail.Transport.send(Transport.java:120) at javaapplication5.SendMail.send(SendMail.java:77) at javaapplication5.SendMailTest.main(SendMailTest.java:17) Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.java:523) at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:355) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:789) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:744) at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75) at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:106) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read(BufferedInputStream.java:237) at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:84) at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1742) ... 9 more 

任何人都可以帮我使用代理使用JavaMail API发送邮件吗?

您正在尝试与非SSL端口建立SSL连接。 这不行。

如果您想通过Gmail发送邮件,请参阅常见问题解答: http : //java.sun.com/products/javamail/FAQ.html#gmail

尝试通过smtp.live.com上的Hotmail SMTP服务器发送电子邮件时,我遇到了同样的exception。 以下是最终对我有用的设置:

 mail.smtp.starttls.enable=true mail.smtp.port=587 

如果您不想使用SSL,并且您使用的是smtp而不是smtps,请尝试这些设置

 mail.smtp.starttls.enable=false mail.transport.protocol=smtp 

正如Andersen所回答的那样,对非SSL端口进行SSL连接( mail.smtp.ssl.enable=true )将引发此错误。

这通常是由连接到错误的端口引起的,因为许多流行的邮件服务使用端口587而不是默认的smtps端口465.这适用于GMail , Hotmail / Live Mail和Yahoo Mail 。

但问题是,即使我将ssl设置为false,Java Mail也坚持使用SSL。

在跟踪源代码之后,问题是我使用了Session.getDefaultInstance ,从一些示例代码中复制。 它只在第一次调用时创建一个具有给定属性的会话; 子序列调用将返回旧会话,而不是新会话。

切换到Session.getInstance确保它使用我传入的属性,并解决了我的“SSLException:无法识别的SSL消息”。

使用Gmail时我遇到了这个问题。

为了使用Gmail,我必须打开“允许安全性较低的应用”

登录Gmail帐户后,可以在https://www.google.com/settings/security/lesssecureapps上找到此Gmail设置。