【问题标题】:javax.net.ssl.SSLException when sending mail using JavaMail使用 JavaMail 发送邮件时出现 javax.net.ssl.SSLException
【发布时间】:2010-11-12 13:22:07
【问题描述】:
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 发送邮件?

【问题讨论】:

  • 我认为如果您发布用于发送邮件的代码会有所帮助:D
  • 抛出这个异常的代码是什么?
  • 产生这个 Stacktrace 的一些代码怎么样?

标签: java jakarta-mail


【解决方案1】:

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

为了使用 Gmail,我必须开启“允许不太安全的应用”

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

【讨论】:

    【解决方案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: Unrecognized SSL message”。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-18
            • 1970-01-01
            • 1970-01-01
            • 2013-04-27
            • 2018-12-18
            • 2020-05-28
            • 1970-01-01
            相关资源
            最近更新 更多