Sending mail: java.net.SocketException: Network is unreachable: connect

匿名 (未验证) 提交于 2019-12-03 02:06:01

问题:

Try send mail via javax.mail:

Properties props = new Properties(); props.put("mail.smtp.host", "xxxxx"); props.put("mail.smtp.port", "25"); props.put("mail.smtp.auth", "false");  Session session = Session.getInstance(props,   new javax.mail.Authenticator() {     protected PasswordAuthentication getPasswordAuthentication() {         return new PasswordAuthentication("xx", "xx");     }   });  try {     Message message = new MimeMessage(session);     message.setFrom(new InternetAddress("xxxxx"));     message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("xxxxx"));     message.setSubject("Subject");     message.setText("Body");      Transport.send(message);      System.out.println("Done");  } catch (MessagingException e) {     throw new RuntimeException(e); } 

It throw exception

Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: srv-mail.imb.invention.com, port: 25;   nested exception is:         java.net.SocketException: Network is unreachable: connect         at foo.SendMailTest.main(SendMailTest.java:41) Caused by: javax.mail.MessagingException: Could not connect to SMTP host: xxx.xxxx.zzzzz.com, port: 25;   nested exception is:         java.net.SocketException: Network is unreachable: connect         at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)         at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)         at javax.mail.Service.connect(Service.java:295)         at javax.mail.Service.connect(Service.java:176)         at javax.mail.Service.connect(Service.java:125)         at javax.mail.Transport.send0(Transport.java:194)         at javax.mail.Transport.send(Transport.java:124)         at foo.SendMailTest.main(SendMailTest.java:36) Caused by: java.net.SocketException: Network is unreachable: connect         at java.net.DualStackPlainSocketImpl.connect0(Native Method)         at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)         at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)         at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)         at java.net.AbstractPlainSocketImpl.connect(Unknown Source)         at java.net.PlainSocketImpl.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:321)         at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237)         at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)         ... 7 more 

Server available:

C:\work\test>nc.exe xxx 25 220 xxx.zzz.aaaaaaa.com Microsoft ESMTP MAIL Service ready at Thu, 12 Sep 2013 15:10:45 +0300 

ping also work.

Similar .net code work as expected.

I have no ideas what going wrong....

回答1:

The answer is: java prefer IPv6, but something wrong with it in our company. Adding property java.net.preferIPv4Stack=true solves problem.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!