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

时间:2014-11-14 17:31:33

标签: java dns ipv6 ipv4 socketexception

我已经编写了一个小测试程序,尝试使用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

但是,如果我删除A记录,那么我可以毫无问题地访问SMTP服务器。无论我给出什么值,我都会给java属性&#39; java.net.preferIPv6Addresses&#39; &#39; java.net.preferIPv4Stack&#39;只有AAAA记录时,程序才能访问smtp服务器。如果同一主机名的A和AAAA记录都存在,我如何告诉Java使用AAAA记录并防止它获得套接字异常?

0 个答案:

没有答案