JavaMail 發送郵件出現 Connection reset 問題


問題描述

使用 java mail 發送郵件的時候,申請的 163 郵箱作為發件箱,然無論如何配置,均出現 Connection reset,無法正常發送郵件。

Exception in thread "pool-2-thread-1" cn.hutool.extra.mail.MailException: MessagingException: Could not connect to SMTP host: smtp.163.com, port: 465
	at cn.hutool.extra.mail.Mail.send(Mail.java:229)
	at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:211)
	at cn.hutool.extra.mail.MailUtil.send(MailUtil.java:175)
	at com.shulipeng.common.service.impl.MailServiceImpl.sendMail(MailServiceImpl.java:57)
	at com.shulipeng.activiti.listener.MyEventListener.sendMail(MyEventListener.java:134)
	at com.shulipeng.activiti.listener.MyEventListener.lambda$notify$0(MyEventListener.java:93)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 465;
  nested exception is:
	java.net.SocketException: Connection reset
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2211)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740)
	at javax.mail.Service.connect(Service.java:388)
	at javax.mail.Service.connect(Service.java:246)
	at javax.mail.Service.connect(Service.java:195)
	at javax.mail.Transport.send0(Transport.java:254)
	at javax.mail.Transport.send(Transport.java:124)
	at cn.hutool.extra.mail.Mail.doSend(Mail.java:241)
	at cn.hutool.extra.mail.Mail.send(Mail.java:227)
	... 8 more
Caused by: java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:210)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
	at sun.security.ssl.InputRecord.read(InputRecord.java:503)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
	at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:620)
	at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:394)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:218)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175)
	... 16 more

問題解決

相同的代碼,用公司的網絡不能正常發送,用自己手機發出來的熱點可以發送,原因是因為被牆了😓....
由於是公司電腦進行開發,是處於內網狀態,雖然我們去 telnet smtp.163.com 25 或者 telnet smtp.163.com 465 都是通的,
但由於發送郵件的時候是通過 socket 與郵箱服務器進行通信的,由於防火牆的原因,導致着郵箱服務器和自己的電腦連接失敗,所以出現此問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM