【问题标题】:Sending mail: java.net.SocketException: Network is unreachable: connect发送邮件:java.net.SocketException:网络不可达:连接
【发布时间】:2013-09-16 19:54:17
【问题描述】:

尝试通过 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);
}

抛出异常

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

可用服务器:

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 也可以。

类似的 .net 代码按预期工作。

我不知道出了什么问题......

【问题讨论】:

  • 你是否有任何机会在代理背后?
  • 我正在尝试通过 telnet 连接到您的电子邮件服务器的 25 和 587 端口(最常见的端口),但 ping 无法正常工作。您确定它现在正在接受连接吗?
  • 不,代理不存在。应该只能从我们的公司网络连接到此邮件服务器。不知道为什么会被 ping 通。
  • 这个问题似乎与 Java 无关,您应该先尝试连接一个知名的邮件客户端(例如 Thunderbird),并首先排除是服务器接受连接的问题。
  • 我已将 Outlook 连接到此服务器。我也有一些 .net 工具,它们使用这个服务器发送邮件(从我的电脑)。他们都工作正确。 :( 我还有“blat”程序,它也可以正常工作并通过该服务器发送邮件。

标签: java email jakarta-mail


【解决方案1】:

答案是:java 更喜欢 IPv6,但我们公司有问题。 添加属性java.net.preferIPv4Stack=true 即可解决问题。

【讨论】:

  • 太棒了...这帮助我找到了一个解决方案,以解决我在 Jenkins 突然不发送电子邮件时遇到的相同错误。谢谢!
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 2014-02-09
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多