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 
+5

默认位置,詹金斯配置文件在/ etc /默认/詹金斯 – bruThaler 2013-08-28 12:14:26

+2

我想,我现在收到以下错误。 - 无法发送电子邮件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

+5

“客户端没有权限发送为”困扰我直到我意识到我没有设置“系统管理员的电子邮件地址” – espenalb 2015-07-28 10:50:59

詹金斯在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

enter image description here

改变从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”的配置。

+2

tks男人!这解决了我的问题! – 2014-06-25 14:13:23

+0

我不知道如何,但这是有效的。 – 2017-05-11 17:37:33

+0

我很遗憾,我只有一个愿意付出。多么愚蠢的错误 – 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

即使船尾呃设置-Dmail.smtp.starttls.enable=true正如@ n​​sof在文件/etc/default/jenkins(debian/ubuntu)中的回答中所提到的那样,它不适用于我。

诀窍是SMTP端口设置为和取消选中Use SSL,如下所示,然后将邮件发送成功。

enter image description here

+0

出于某种原因,这是它为我工作的唯一方式。詹金斯2.28 + OpenJDK 8 – 2016-11-13 09:24:18

对于詹金斯上Ubuntu的16.04

1 - 编辑配置文件:

sudo nano /etc/default/jenkins 

2 - 注释掉现有JAVA_ARGS,添加以下所示的新之一:

#JAVA_ARGS="-Djava.awt.headless=true" 
JAVA_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true" 

个3 - 重新启动詹金斯

sudo service jenkins restart 

enter image description here

对于詹金斯的Red Hat Enterprise Linux服务器上的7.4版(米埔) 编辑/ etc/SYSCONFIG /詹金斯添加

enter image description here

的Jenkins服务配置文件需要root访问机器。 在CloudBees的詹金斯企业,你可以找到在这个文件:

  • 的/ etc /默认/詹金斯:位置对于大多数Linux发行版。
  • /etc/sysconfig/jenkins:RedHat/CentOS发行版的位置。
  • C:\ Program Files文件\詹金斯\ jenkins.xml:对于Windows
在Ubuntu