gpt4 book ai didi

java - 我得到 java.net.SocketException : Permission denied: connect when sending an email in Jenkins

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:48 26 4
gpt4 key购买 nike

我的配置:

  • 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>

我的 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>

注意:“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 中存在一个 Java 7 暴露的错误,涉及防火墙以及 Java 7 如何使用 ipv4 映射的 ipv6 地址。

据报道,这可以通过将 -Djava.net.preferIPv4Stack=true 添加到 java 运行时来解决。我已经成功地使用 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

关于java - 我得到 java.net.SocketException : Permission denied: connect when sending an email in Jenkins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16110345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com