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:

果然是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,可以通过下图的方式配置:

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

之后问题解决。

时间: 2024-12-27 04:26:47

Java发送邮件报错:Network is unreachable的相关文章

javamail发送邮件报错,求指教。

问题描述 javamail发送邮件报错,求指教. 前段时间写了一个简单的javamail发送邮件的功能,测试功能正常后就没管了.今天再次测试的时候,发现居然报错了.求大神指点指点. package com.temp.test; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax

树形 递归-java 递归报错 求大神帮忙

问题描述 java 递归报错 求大神帮忙 private List<Post> getPostLower(List<Post> PostTops){ List<Post> postAll=new ArrayList<Post>(); // 上级 for(Post post:PostTops){ //查询到下级 List<Post> posts=basService.queryPostByParentId(post.getPostId()); //

java程序报错,求大神找bug

问题描述 java程序报错,求大神找bug package arraysofobjects; import java.util.Scanner; public class arraysofobjects { public static void main(String[] args) { Scanner input=new Scanner(System.in); students[] stu=new students[4]; String name; int grade; for(int i=0

jsp-大神帮帮我啊,java web报错,谢谢了

问题描述 大神帮帮我啊,java web报错,谢谢了 2015-6-2 12:09:06 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet jsp threw exception java.lang.NullPointerException at com.mr.tool.JDBConnection.executeQuery(JDBConnection.java:35) at

java eclipse tomcat-在eclipse中配置好tomcat后,其他项目下的java运行报错

问题描述 在eclipse中配置好tomcat后,其他项目下的java运行报错 tomcat配置成功了,localhost:8080也没有问题,但是java项目下的java文件不能编译通过,用的是tomcat免安装版的6.0 解决方案 这个不一定就是tomcat的问题,也可能是项目的问题,比如说你的项目是java7开发,而现在的tomcat环境用的是jdk6 如果可以最好是把报错信息发出来 解决方案二: 你的tomcat里面以前是不是发布过其他的项目,其他的项目里面有编译错误,而你没把tomca

leetcode第一题java代码报错。求原因?

问题描述 leetcode第一题java代码报错.求原因? package com.hust.ali.test; import java.util.*; /** 给定一个整数数组,发现两个数字,使得它们添加到一个特定的目标数. 函数twoSum应返回两个数字,使得它们加起来的目标,其中索引1必须小于索引2的所有. @author Cat */ public class TwoNumSum { /* @param args */ public static void main(String[] a

java selenium 报错 ClassNotFoundException

问题描述 java selenium 报错 ClassNotFoundException 解决方案 http://www.51testing.com/html/66/n-3706866.html

java cmd报错!!求大神!

问题描述 java cmd报错!!求大神! 10C 该项目打包jar在cmd运行报错了.在idea工具下正常运行,请问什么原因啊!求大神指教!具体怎么解决啊!谢谢! 解决方案 activity -server.jar 包没导入吧,放到lib里边试试 解决方案二: 配置文件里面有东西没配置好 解决方案三: http://chenzhou123520.iteye.com/blog/1971322是不是这个原因?

代码-javamail 发送邮件报错Not connected

问题描述 javamail 发送邮件报错Not connected javamail 发送邮件报错Not connected at com.sun.mail.smtp.Smtp.checkConnected... 以下是报错信息: 解决方案 php使用smtp发送邮件报错Cannot connenct to relay host解决JMail发送邮件报错The message was undeliverable. All servers failed to receive the message