我得到java.net.SocketException:权限被拒绝:在Jenkins中发送电子邮件时连接

我的配置:

  • Windows 7机器
  • Java 7
  • Jenkins 1.511在本地帐户上作为服务运行

我的jenkins.xml文件

 jenkins Jenkins  C:\Program Files\IBM\SDP8.5\jdk\bin\java.exe -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 -Djava.net.preferIPv4Stack=true  

我的hudson.tasks.Mailer.xml文件

  @example.com http://localhost:8081/ Jenkins Build Server <do-not-reply@example.com> smtp.example.com false UTF-8  

注意:“example.com”取代了我的真实域名/电子邮件/ smtp服务器。

当我指示Jenkins发送测试电子邮件时,我收到此错误:

 Failed to send out e-mail javax.mail.MessagingException: Could not connect to SMTP host: smtp.example.com, port: 25; nested exception is: java.net.SocketException: Permission denied: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638) at javax.mail.Service.connect(Service.java:295) 

我对这个错误的理解是,Windows 7中存在一个关于防火墙以及Java 7如何使用ipv4映射的ipv6地址的错误。

据报道,这可以通过在java运行时添加-Djava.net.preferIPv4Stack = true来解决。 我在使用ANT电子邮件任务在此计算机上添加-Djava.net.preferIPv4Stack = true方面取得了成功。 然而,在jenkins,我没有运气。

请注意,jenkins.xml文件似乎完全被忽略。 未设置-Djava.net.preferIPv4Stack = true参数。 PATH和JAVA_HOME都指向IBM运行时,但Jenkins仍然从Oracle v7运行时开始。 jenkins必须产生一个新的流程来启动和获取系统java 7。

使用上面的配置,如果我去Jenkins脚本控制台并使用“System.getProperty(”java.net.preferIPv4Stack“)查询它,我什么也得不到(没有设置)。如果我设置了那个参数,我仍然会得到错误。如果我将-Djava.net.preferIPv4Stack = true添加到命令行(不使用该服务),则在通过脚本控制台进行询问时仍未设置它。

我的问题

  1. 为什么我会收到此错误以及如何解决? 请记住,我可以编写一个ANT脚本,使用相同的smtp服务器和java运行时成功发送电子邮件。

  2. 如何让Jenkins启动-Djava.net.preferIPv4Stack = true参数并指定运行时间?

一些说明:

  • 由于蹩脚的公司问题,我无法卸载Java 7。
  • 由于同样的问题,我无法安装Java 6。
  • 我被允许安装IBM JDK / JRE。

-jar参数之后的参数将传递给应用程序,而不是java vm。 因此,在-jar参数之前尝试移动-Djava.net.preferIPv4Stack=true

2.如何让Jenkins启动-Djava.net.preferIPv4Stack = true参数并指定运行时间?

我不确定Java运行时,但这对我来说对参数有用:“-Djava.net.preferIPv4Stack = true”。

1)记事本“C:\ Program Files(x86)\ Jenkins \ jenkins.xml”

2)找到类似于的行:

 -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 -Djava.net.preferIPv4Stack=true 

3)将“-Djava.net.preferIPv4Stack = true”部分移到-jar参数之前 。 它现在看起来应该类似于:

 -Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Djava.net.preferIPv4Stack=true -jar "%BASE%\jenkins.war" --httpPort=8080 

4)保存文件,退出记事本。

5)重新启动jenkins服务

6)从“管理Jenkins – >配置系统”网页发送测试电子邮件。 电子邮件现在应该可以使用