Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaMail从仅IPv6主机到双堆栈环境失败_Java_Dns_Ipv6_Ipv4_Socketexception - Fatal编程技术网

JavaMail从仅IPv6主机到双堆栈环境失败

JavaMail从仅IPv6主机到双堆栈环境失败,java,dns,ipv6,ipv4,socketexception,Java,Dns,Ipv6,Ipv4,Socketexception,我编写了一个小测试程序,尝试使用JavaMail发送邮件消息。我在Java中遇到了奇怪的行为,我不知道如何修复它。基本设置是,我的测试程序从仅限IPv6的linux设备上运行,但它正试图发送到双堆栈环境中的IPv4和IPv6 SMTP服务器。我所说的双堆栈环境是指DNS服务器有一个A和一个AAAA记录,并且smtp服务器的主机名相同,据我所知,这应该是合法的。当我使用A和AAAA记录运行我的程序时,我得到以下异常: javax.mail.MessagingException: Could not

我编写了一个小测试程序,尝试使用JavaMail发送邮件消息。我在Java中遇到了奇怪的行为,我不知道如何修复它。基本设置是,我的测试程序从仅限IPv6的linux设备上运行,但它正试图发送到双堆栈环境中的IPv4和IPv6 SMTP服务器。我所说的双堆栈环境是指DNS服务器有一个A和一个AAAA记录,并且smtp服务器的主机名相同,据我所知,这应该是合法的。当我使用A和AAAA记录运行我的程序时,我得到以下异常:

javax.mail.MessagingException: Could not connect to SMTP host: <MY Fully qualified domain name>, port: 25;
nested exception is:
java.net.SocketException: Network is unreachable
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
at javax.mail.Service.connect(Service.java:275)
at javax.mail.Service.connect(Service.java:156)
at javax.mail.Service.connect(Service.java:105)
at javax.mail.Transport.send0(Transport.java:168)
at javax.mail.Transport.send(Transport.java:98)
Caused by: java.net.SocketException: Network is unreachable
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
... 8 more
javax.mail.MessaginException:无法连接到SMTP主机:,端口:25;
嵌套异常是:
java.net.SocketException:无法访问网络
在com.sun.mail.smtp.SMTPTransport.openServer上(SMTPTransport.java:1282)
在com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)上
在javax.mail.Service.connect(Service.java:275)
在javax.mail.Service.connect(Service.java:156)
在javax.mail.Service.connect(Service.java:105)
位于javax.mail.Transport.send0(Transport.java:168)
在javax.mail.Transport.send(Transport.java:98)
原因:java.net.SocketException:无法访问网络
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(未知源)
位于java.net.AbstractPlainSocketImpl.connectToAddress(未知源)
位于java.net.AbstractPlainSocketImpl.connect(未知源)
位于java.net.socksocketimpl.connect(未知源)
位于java.net.Socket.connect(未知源)
位于java.net.Socket.connect(未知源)
在com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)上
位于com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
在com.sun.mail.smtp.SMTPTransport.openServer上(SMTPTransport.java:1250)
... 8个以上

但是,如果我删除了A记录,那么我就可以毫无问题地访问SMTP服务器。无论我给java属性“java.net.preferIPv6地址”“java.net.preferIPv4堆栈”赋予什么值,程序都只能在只有AAAA记录时访问smtp服务器。当a和AAAA记录都存在于同一主机名时,我如何告诉Java使用AAAA记录并防止它出现套接字异常?

这听起来像是Java中的一个严重错误。。。