Java发送邮件报错:Network is unreachable

Wesley13
• 阅读 930

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

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上找到了办法:为系统设置以下变量:

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:

Java发送邮件报错:Network is unreachable

果然是IPv6在作祟。

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

java -Djava.net.preferIPv4Stack=true

也可以通过setProperty API来设置:

System.setProperty("java.net.preferIPv4Stack", "true");

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

-Djava.net.preferIPv4Stack=true

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

Java发送邮件报错:Network is unreachable

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

Java发送邮件报错:Network is unreachable

之后问题解决。

点赞
收藏
评论区
推荐文章
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
javamail发送邮件(简单邮件qq邮箱)
/\\<dependency<groupIdcom.sun.mail</groupId<artifactIdjavax.mail</artifactId<version1.5.4</version</dependency\//\上面是maven需要添加的依赖\/p
Easter79 Easter79
3年前
sprintboot
一、邮件发送使用springboot自带的邮件系统就能实现邮件的发送,首先导入依赖:1、新建springboot项目,添加依赖<dependency<groupIdorg.springframework.boot</groupId<artifactIdspringbootstartermail
Easter79 Easter79
3年前
springboot系列九,springboot整合邮件服务、整合定时任务调度
一、整合邮件服务   如果要进行邮件的整合处理,那么你一定需要有一个邮件服务器,实际上java本身提供有一套JavaMail组件以实现邮件服务器的搭建,但是这个搭建的服务器意义不大,因为你现在搭建完成了,向一些大型的站点发送一封邮件,若干小时你就会被拉黑,如果不想拉黑彼此之间就做一个白名单即可。   要发送邮件,首先要知道
Easter79 Easter79
3年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Easter79 Easter79
3年前
SpringBoot使用JavaMailSender发送邮件(1)
邮件发送是一个非常常见的功能,最初Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐。后来Spring中提供了JavaMailsender用来简化邮件配置,而SpringBoot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。在开始之前我们需要申请开通POP3/SMTP服
Stella981 Stella981
3年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Stella981 Stella981
3年前
SpringBoot使用JavaMailSender发送邮件(1)
邮件发送是一个非常常见的功能,最初Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐。后来Spring中提供了JavaMailsender用来简化邮件配置,而SpringBoot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。在开始之前我们需要申请开通POP3/SMTP服
Easter79 Easter79
3年前
SpringBoot2.x 整合 邮件发送
!(https://oscimg.oschina.net/oscnet/d6e10fb8d30306d7aac7b25d9af5f79c9a6.png)在实际项目中,经常需要用到邮件通知功能。比如,用户通过邮件注册,通过邮件找回密码等;又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多。正常我们会用J
Stella981 Stella981
3年前
SpringBoot2.x 整合 邮件发送
!(https://oscimg.oschina.net/oscnet/d6e10fb8d30306d7aac7b25d9af5f79c9a6.png)在实际项目中,经常需要用到邮件通知功能。比如,用户通过邮件注册,通过邮件找回密码等;又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多。正常我们会用J