Jenkins SMTP TLS
我试图设置Jenkins以使用我们公司的SMTP服务器来发送电子邮件生成通知。我们使用TLS作为端口587上的加密方法。虽然我似乎无法使电子邮件通知正常工作。Jenkins SMTP TLS
这里是我的Hudson.Tasks.Mailer.xml文件,所以你可以看到我的配置(我已经删除了SMTP认证用户名和密码,并以防万一稍有变化的smtpHost)
<hudson.tasks.Mailer_-DescriptorImpl>
<helpRedirect/>
<defaultSuffix></defaultSuffix>
<hudsonUrl>http://localhost:8080/</hudsonUrl>
<smtpAuthUsername></smtpAuthUsername>
<smtpAuthPassword></smtpAuthPassw$
<adminAddress></adminAddress>
<smtpHost>pod#####.outlook.com</smtpHost>
<useSsl>true</useSsl>
<smtpPort>587</smtpPort>
<charset>UTF-8</charset>
</hudson.tasks.Mailer_-DescriptorImpl>
它看起来从http://issues.hudson-ci.org/browse/HUDSON-2206
我不是很熟悉苹果操作系统(这是运行詹金斯的机器),但我想我可以使用上述解决方法来解决问题。我不完全知道从哪里把那个解决办法了,所以我试图把在这里: /库/ Application Support /詹金斯/ jenkins-runner.sh
defaults="defaults read /Library/Preferences/org.jenkins-ci"
war=`$defaults war` || war="/Applications/Jenkins/jenkins.war"
javaArgs="-Dmail.smtp.starttls.enable=\"true\""
heapSize=`$defaults heapSize` && javaArgs="$javaArgs -Xmx${heapSize}"
permGen=`$defaults permGen` && javaArgs="$javaArgs -XX:MaxPermSize=${permGen}"
home=`$defaults JENKINS_HOME` && export JENKINS_HOME="$home"
add_to_args() {
val=`$defaults $1` && args="$args --${1}=${val}"
}
args=""
add_to_args prefix
add_to_args httpPort
add_to_args httpListenAddress
add_to_args httpsPort
add_to_args httpsListenAddress
add_to_args ajp13Port
add_to_args ajp13ListenAddress
echo "JENKINS_HOME=$JENKINS_HOME"
echo "Jenkins command line for execution"
echo /usr/bin/java $javaArgs -jar "$war" $args
exec /usr/bin/java $javaArgs -jar "$war" $args
这似乎没有解决这个问题。我可以看到,当詹金斯启动了控制台呼叫,但是当我尝试测试配置的电子邮件,我得到以下错误:
Failed to send out e-mail
javax.mail.MessagingException: Could not connect to SMTP host: pod#####.outlook.com, port: 587;
nested exception is:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
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:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
上还有什么我可以尝试任何想法?我已经尝试将电子邮件帐户切换为使用Gmail的SMTP服务器,并且工作正常,但是如果可以的话,我宁愿使用我们的smtp服务器。
试着在错误本身提到的解决方法:
http://issues.hudson-ci.org/browse/HUDSON-2206
在Java:
props.put("mail.smtp.starttls.enable","true");
在Tomcat中:
添加JAVA_OPTS=-Dmail.smtp.starttls.enable="true"
到Tomcat的配置文件。
我与詹金斯有同样的问题,但我的安装在Centos而不是Apple OS上。我仍然认为在此发布解决方案是因为A)您可能能够对解决方案进行必要的调整,并且B)Jenkins用户可能会从中受益。
总之,发现詹金斯配置文件(在其CENTOS在/ etc/SYSCONFIG /詹金斯)
在它定位JENKINS_JAVA_OPTIONS变量并添加以下选项“-Dmail.smtp.starttls.enable =真” 在我的情况下,这是我以前有:
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
这是之后;
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
重启詹金斯服务器(Linux中)
/etc/init.d/jenkins restart
詹金斯在Windows
打开詹金斯。xml和修改参数节点
-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable=true -jar "%BASE%\jenkins.war" --httpPort=8080
对于smtp.live.com:
Set the SMTP port to 587 and uncheck
Use SSL
改变从587到465解决了这个问题的SMTP端口对我来说:
SMTP server: smtp.mandrill.com
Use SMTP Authentication: true
Use SSL: true
SMTP Port: 465
从我可以告诉(声明:我绝不是一个Hud儿子/詹金斯专家) 哈德森/詹金斯电子邮件插件支持SSL加密的SMTP通信 - 但是这种实现要求通信从开始加密。
在端口587上连接时,另一端的服务器可能需要STARTTLS命令(请参阅本文的SSL vs TLS vs STARTTLS文章)。使用纯文本发送此命令以“升级”连接以使用SSL/TLS。
哈德森/詹金斯,而不是试图启动在端口587上协商SSL,这是及时拒绝,导致以下错误:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
我尝试添加建议的JAVA选项“-Dmail.smtp.starttls。 enable = true“启用TLS:
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
不幸的是,这并没有解决我的问题。
将端口更改为465后,SSL协商正确发生,通信成功。
希望有所帮助。
注:詹金斯电子邮件插件总是需要SMTP凭据时您勾选任何“使用SMTP验证”选项,往往是发件人的电子邮件凭证“SSL - 端口465”或“非SSL - 端口587”的配置。
tks男人!这解决了我的问题! – 2014-06-25 14:13:23
我不知道如何,但这是有效的。 – 2017-05-11 17:37:33
我很遗憾,我只有一个愿意付出。多么愚蠢的错误 – Cfreak 2017-06-01 18:02:13
添加-Dmail.smtp.starttls.enable = TRUE作为JAVA_OPTS的参数如果你的詹金斯在单机模式下更新JAVA_OPTS运行在/ etc/SYSCONFIG /詹金斯 如果詹金斯运行解决我的问题
在Tomcat中更新JAVA_OPTS
- catalina.sh用于UNIX
- catalina.bat中的Windows
默认位置,詹金斯配置文件在/ etc /默认/詹金斯 – bruThaler 2013-08-28 12:14:26
我想,我现在收到以下错误。 - 无法发送电子邮件com.sun.mail.smtp.SMTPSendFailedException:550 5.7.1客户端无权发送com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057 )at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1862) atcom.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1100)at javax.mail.Transport.send0(Transport。在javax.mail.Transport.send(Transport.java:124)在hudson.tasks.Mailer $ DescriptorImpl.doSendTestMail(Mailer.java:499) – 2013-11-26 05:27:58
“客户端没有权限发送为”困扰我直到我意识到我没有设置“系统管理员的电子邮件地址” – espenalb 2015-07-28 10:50:59