JavaMail SMTP 非加密登陸失敗解決

DEBUG: setDebug: JavaMail version 1.5.2java

DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]windows

DEBUG SMTP: useEhlo true, useAuth truesocket

DEBUG SMTP: trying to connect to host "xxx", port 25, isSSL falseide

Exception in thread "main" com.sun.mail.util.MailConnectException: Couldn't connect to host, port: xxx, 25; timeout -1;測試

  nested exception is:spa

java.net.SocketException: Network is unreachable: connect.net

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2053)blog

at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:697)ip

at javax.mail.Service.connect(Service.java:364)get

at com.navinfo.wolverine.test.mail.MailApi.main(MailApi.java:74)

Caused by: java.net.SocketException: Network is unreachable: connect

at java.net.DualStackPlainSocketImpl.connect0(Native Method)

at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)

at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)

at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)

at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)

at java.net.Socket.connect(Socket.java:579)

at com.sun.mail.util.WriteTimeoutSocket.connect(WriteTimeoutSocket.java:107)

at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:312)

at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:236)

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2019)

/********************************* 一條華麗的分割線 *************************************/

通過各類百度、各類谷歌,各類嘗試 未果,奇怪的是之前能夠正常運行的代碼,竟然也報這個錯 ~~~

無奈換個系統試試吧,將項目移到 Linux 上進行測試,我 KAO ,竟然沒問題了。

Eclipse 、JDK 版本都是同樣的,惟獨平臺不同,難道是JDK的問題。帶着這個疑問,在Windows上將如今用的JDK1.7更換爲JDK1.6。尼瑪,太陽出來了,郵件發出去了。

總結:問題出在 JDK1.7 上。

2中解決辦法:

一:若是是main方法:

 /*
 * jdk7+  在安裝有 IPv6 和 IPv4 的計算機上,會使用一種 IPv6 模擬的 IPv4, 而 windows
 * 防火牆會把這種模擬的 IPv4 數據擋住。 因此要配置系統參數優先用IP4
 */

 /*
 * jdk7+  在安裝有 IPv6 和 IPv4 的 windows 系統上,JAVA默認使用IPV6,但系統只設置了ipv4的ip,因此咱們要設置程序使用IPV4
 */
System.setProperty("java.net.preferIPv4Stack", "true"); 

----------——-----------------------------————--------------------

二:直接給jdk 添加參數:-Djava.net.preferIPv4Stack=true

舉例:

java -jar -Djava.net.preferIPv4Stack=true xxxx.jar

或者修改配置文件

相關文章
相關標籤/搜索