我有一个使用javax.mail发送SMTP邮件的Java程序。 该程序适用于Linux机器很好,我想给事先强调。 当我尝试在我的Windows 7 x64系统中,这个相同的代码,我得到这个错误:
send failed, exception: javax.mail.MessagingException: Could not connect to SMTP host: smtp.west.cox.net, port: 25;
nested exception is: java.net.SocketException: Network is unreachable: connect
下面是代码:
Session session = Session.getInstance(props, null);
MimeMessage msg = new MimeMessage(session);
msg.setFrom();
msg.setRecipients(Message.RecipientType.TO, props.getProperty("mail.to", "me@mine.com"));
msg.setSubject(mySubject);
msg.setSentDate(new Date());
msg.setContent(sBuf.toString(), "text/html");
Transport.send(msg);
这个程序非常使用默认的一切。 它工作正常,在同一个网络上的另一盒。 它使用的是我用我的普通邮件客户端,它工作正常相同的设置。 在灯架上有Windows中被阻止SMTP东西,但只为Java。
我安装了赛门铁克(诺顿)360。 关闭它没有什么区别,但重新启动到安全模式(即禁用几乎所有)允许程序运行并发送邮件就好了。
因此,回顾一下:
- 该程序代码工作。
- 该设置是正确的。
- SMTP适用于Windows Mail和仅阻止对Java这个Windows机器上。
我花前一天撕开的东西和卸载/重装,我想知道是否有人对解决这个有什么建议?
该问题是由于对Java的IPv4 / IPv6的偏好。 Java的默认通过使用IPv6(?)和我的ISP不支持IPv6。 然而,它在我的Windows 7盒默认情况下启用。
如果遇到类似的行为,可以通过从上下文菜单中进入“控制面板/网络和互联网/网络连接”,右键单击您的Internet连接,并选择“状态”对此进行验证。 状态对话框将显示类似如下的两行:
IPv4 Connectivity: Internet
IPv6 Connectivity: No Internet access
这是问题的根源 - 的Java喜欢的IPv6,它不能用来连接到互联网。
为了解决这个问题,做这些事情任何一个(或两者):
- 禁用您的Windows 7盒的IPv6。
使用此命令行选项启动Java程序:
-Djava.net.preferIPv4Stack=true
这样做的两者之一将解决这个问题。
我不得不升级形式的Java 1.6中同样的问题到Java 1.7。 因为使用IPv6默认的Java 1.7的问题发生。 为了解决这个问题,就需要添加Java选项像下面的例子。
只是在Windows上运行CMD命令:
**setx _JAVA_OPTIONS -Djava.net.preferIPv4Stack=true**
Synantec EP 12.1 RU5解决您的问题。
的Symantec Endpoint Protection块由Java的邮件客户端发送电子邮件
修复ID:3399185
症状:由Java邮件客户端发送的Symantec Endpoint Protection块SMTP邮件的Internet电子邮件自动防护功能。
解决方法:更新了Internet电子邮件自动防护驱动程序,允许IPv4映射的IPv6地址的处理。
我也面临着同样的问题,基本上是一个Java 7的问题,只是在通过JVM参数“-Djava.net.preferIPv4Stack = true”时,我接到了问题除掉。
虽然这个问题就解决了:它可能仍然是有用指出,某些Windows防火墙拦截/允许基于可执行文件的名称(而不是纯粹的端口号本身)对端口的访问 - 这样你就可以用一个程序结束(比如说展望)被允许和另一个(说的Java)被封锁。
我有类似的问题,但奇怪的是一切工作的罚款JDK 1.6,一旦我安装JDK 1.7,我得到了异常。 我想这可能是这样做的原因!
加入IPV4经过论证,它正在fine..Thank你这么多。