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

Bri*_*man 8 java windows-7 jenkins

我的配置:

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

我的jenkins.xml文件

<service>
  <id>jenkins</id>
  <name>Jenkins</name>
  <env name="JENKINS_HOME" value="%BASE%"/>
  <executable>C:\Program Files\IBM\SDP8.5\jdk\bin\java.exe</executable>
  <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 -Djava.net.preferIPv4Stack=true</arguments>
</service>
Run Code Online (Sandbox Code Playgroud)

我的hudson.tasks.Mailer.xml文件

<hudson.tasks.Mailer_-DescriptorImpl plugin="mailer@1.4">
  <defaultSuffix>@example.com</defaultSuffix>
  <hudsonUrl>http://localhost:8081/</hudsonUrl>
  <adminAddress>Jenkins Build Server &lt;do-not-reply@example.com&gt;</adminAddress>
  <smtpHost>smtp.example.com</smtpHost>
  <useSsl>false</useSsl>
  <charset>UTF-8</charset>
</hudson.tasks.Mailer_-DescriptorImpl>
Run Code Online (Sandbox Code Playgroud)

注意:"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)
Run Code Online (Sandbox Code Playgroud)

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

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

请注意,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.

Nil*_*lsH 12

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