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

之后问题解决。

目录
相关文章
|
6天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
29 0
|
6天前
|
Java Windows
windows下 安装 Elasticsearch报错warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
windows下 安装 Elasticsearch报错warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
47 0
|
6天前
|
Java Maven
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
44 3
|
3天前
|
网络安全 流计算 Python
实时计算 Flink版操作报错合集之Flink sql-client 针对kafka的protobuf格式数据建表,报错:java.lang.ClassNotFoundException 如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
16 1
|
4天前
|
消息中间件 关系型数据库 网络安全
实时计算 Flink版操作报错合集之Flink sql-client 针对kafka的protobuf格式数据建表,报错:java.lang.ClassNotFoundException 如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
14 1
|
6天前
|
Java Kotlin
java调用kotlin代码编译报错“找不到符号”的问题
java调用kotlin代码编译报错“找不到符号”的问题
17 10
|
6天前
|
Kubernetes 网络协议 Java
容器服务Kubernetes版产品使用合集之遇到报错"java.lang.NoClassDefFoundError"如何解决
容器服务Kubernetes版,作为阿里云提供的核心服务之一,旨在帮助企业及开发者高效管理和运行Kubernetes集群,实现应用的容器化与微服务化。以下是关于使用这些服务的一些建议和合集,涵盖基本操作、最佳实践、以及一些高级功能的使用方法。
21 2
|
6天前
|
前端开发 Java 应用服务中间件
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
26 0
|
6天前
|
Arthas 安全 Java
java服务报错 FileNotFoundException:打开的文件过多
java服务报错 FileNotFoundException:打开的文件过多
17 0
|
6天前
|
Java 测试技术 Maven
Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]
Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]