我得到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添加到命令行(不使用该服务),则在通过脚本控制台进行询问时仍未设置它。
我的问题
-
为什么我会收到此错误以及如何解决? 请记住,我可以编写一个ANT脚本,使用相同的smtp服务器和java运行时成功发送电子邮件。
-
如何让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 – >配置系统”网页发送测试电子邮件。 电子邮件现在应该可以使用