Java发送邮件报错:Network is unreachable

使用javamail发送邮件时,老是提示Network is Network:

?
1
2
3
4
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp. 163 .com,  25 ; timeout - 1 ;
   nested exception is:
     java.net.SocketException: Network is unreachable: connect
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java: 2053 )

于是ping了下,也telnet连了下,都没有问题,使用Outlook客户端配置该smtp地址也没有问题。由于之前使用过同样的代码和同样的配置发送成功过,所以代码应该没有问题的。找了好久,终于在Stackoverflow上找到了办法:为系统设置以下变量:

?
1
java.net.preferIPv4Stack= true

又顺便去官网上找了找这个变量的作用:

java.net.preferIPv4Stack (default: false)
If IPv6 is available on the operating system the underlying native socket will be, by default, an IPv6 socket which lets applications connect to, and accept connections from, both IPv4 and IPv6 hosts. However, in the case an application would rather use IPv4 only sockets, then this property can be set to true. The implication is that it will not be possible for the application to communicate with IPv6 only hosts.

大意是指:如果系统的IPv6可用的话,底层的Socket连接默认会使用IPv6的,因为它可以同时支持IPv4和IPv6的连接和被连接。如果应用只需要使用IPv4的socket连接,就把这个选项设置为true,这意味着该应用将不能与仅支持IPv6的机器通讯。

再看了看自己的机器上的IP:

161211_wbjy_1434710.png

果然是IPv6在作祟。

该选项可以通过以下命令在启动java时设置:

?
1
java -Djava.net.preferIPv4Stack= true

也可以通过setProperty API来设置:

?
1
System.setProperty( "java.net.preferIPv4Stack" "true" );

如果使用tomcat服务器,则可以给tomcat加上启动参数:

?
1
-Djava.net.preferIPv4Stack= true

如果在eclipse中使用tomcat,可以通过下图的方式配置:

164144_1DSC_1434710.png

之后的弹出框中切换到Argument标签,然后配置该变量:

164523_PT6I_1434710.png

之后问题解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值