使用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设置。