簡體   English   中英

使用 JavaMail 發送郵件時出現 javax.net.ssl.SSLException

[英]javax.net.ssl.SSLException when sending mail using 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 使用代理發送郵件嗎?

您正在嘗試與非 SSL 端口建立 SSL 連接。 這是行不通的。

如果您想通過 gmail 發送郵件,請參閱常見問題解答: http : //java.sun.com/products/javamail/FAQ.html#gmail

嘗試通過 smtp.live.com 上的 Hotmail SMTP 服務器發送電子郵件時,我遇到了同樣的異常。 以下是最終對我有用的設置:

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

如果您不想使用 SSL,並且您使用的是 smtp 而不是 smtps,請嘗試這些設置

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

正如安徒生回答的那樣,對非 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 消息”。

我在使用 Gmail 時遇到了這個問題。

為了使用 Gmail,我必須打開“允許安全性較低的應用程序”

登錄 Gmail 帳戶后,可以在https://www.google.com/settings/security/lesssecureapps上找到此 Gmail 設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM