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

时间:2009-07-21 06:40:00

标签: java javamail

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发送邮件吗?

5 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

正如Andersen所说,对非SSL端口进行SSL连接(mail.smtp.ssl.enable=true)会引发此错误。

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

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

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

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

答案 4 :(得分:0)

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

要使用Gmail,我必须开启"允许使用安全性较低的应用"

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