Jenkins 詹金斯SMTP TLS

Jenkins 詹金斯SMTP TLS,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我正在尝试设置Jenkins使用我们公司的SMTP服务器发送电子邮件生成通知。我们在端口587上使用TLS作为加密方法。不过,我似乎无法让电子邮件通知正常工作 这是我的Hudson.Tasks.Mailer.xml文件,因此您可以查看我的配置(为了以防万一,我删除了SMTP验证用户和密码,并稍微更改了smtpHost) 这似乎并没有解决问题。当Jenkins启动时,我可以在控制台中看到该调用,但当我尝试测试配置电子邮件时,我收到以下错误: Failed to send out e-mail j

我正在尝试设置Jenkins使用我们公司的SMTP服务器发送电子邮件生成通知。我们在端口587上使用TLS作为加密方法。不过,我似乎无法让电子邮件通知正常工作

这是我的Hudson.Tasks.Mailer.xml文件,因此您可以查看我的配置(为了以防万一,我删除了SMTP验证用户和密码,并稍微更改了smtpHost)

这似乎并没有解决问题。当Jenkins启动时,我可以在控制台中看到该调用,但当我尝试测试配置电子邮件时,我收到以下错误:

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)
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

还有什么我可以试试的吗?我已尝试将电子邮件帐户切换为使用gmail的smtp服务器,效果很好,但如果可以,我宁愿使用我们的smtp服务器。

尝试错误中提到的解决方法:

在Java中:

props.put("mail.smtp.starttls.enable","true");
在Tomcat中:


将JAVA\u OPTS=-Dmail.smtp.starttls.enable=“true”添加到tomcat配置文件中。

我对Jenkins也有同样的问题,但我的安装在Centos而不是Apple OS上。我仍然想在这里发布解决方案,因为A)您可以对解决方案进行必要的调整,B)Linux&Jenkins用户可能会从中受益

无论如何,找到Jenkins配置文件(在CENTOS中,在/etc/sysconfig/Jenkins中)

在其中找到JENKINS_JAVA_OPTIONS变量并添加以下选项“-Dmail.smtp.starttls.enable=true” 就我而言,这是我以前的经历:

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
这是之后

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
重新启动Jenkins服务器(在Linux中)


适用于Windows上的Jenkins

打开jenkins.xml并修改arguments节点

-Xrs-Xmx256m-Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle-Dmail.smtp.starttls.enable=true-jar“%BASE%\jenkins.war”--httpPort=8080

对于smtp.live.com:

将SMTP端口设置为587并取消选中
使用SSL

将SMTP端口从587更改为465为我解决了此问题:

SMTP server:               smtp.mandrill.com
Use SMTP Authentication:   true
Use SSL:                   true
SMTP Port:                 465
据我所知(免责声明:我绝不是哈德逊/詹金斯专家) Hudson/Jenkins电子邮件插件支持SSL加密的SMTP通信-但是此实现要求通信从一开始就进行加密

在端口587上连接时,另一端的服务器可能需要STARTTLS命令(请参阅本文)。此命令使用纯文本发送,以“升级”连接以使用SSL/TLS

相反,Hudson/Jenkins试图在端口587上开始协商SSL,但被立即拒绝,导致以下错误:

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)
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协商正确进行,通信成功

希望有帮助


注意:Jenkins电子邮件插件始终需要SMTP凭据,当您为任何“SSL-端口465”或“非SSL-端口587”配置选中“使用SMTP身份验证”选项时,这些凭据通常是发件人的电子邮件凭据。

添加-Dmail.SMTP.starttls.enable=true作为JAVA\u OPTS的参数解决了我的问题

如果您的jenkins以独立模式运行,请在/etc/sysconfig/jenkins中更新JAVA_OPTS 如果您的jenkins正在tomcat更新JAVA_选项中运行

  • catalina.sh for unix
  • 用于windows的catalina.bat

即使设置了
-Dmail.smtp.starttls.enable=true
,如文件
/etc/default/jenkins
(debian/ubuntu)中@nsof的答案所述,它对我来说也不起作用

诀窍是将SMTP端口设置为587并取消选中下面显示的
使用SSL
,然后成功发送电子邮件


对于Ubuntu 16.04上的詹金斯:

1-编辑配置文件:

sudo nano /etc/default/jenkins
2-注释掉现有JAVA_参数,添加新参数,如下所示:

#JAVA_ARGS="-Djava.awt.headless=true"
JAVA_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
3-重新启动Jenkins

sudo service jenkins restart

适用于红帽企业版Linux服务器7.4版(Maipo)上的Jenkins 编辑/etc/sysconfig/jenkins以添加

Jenkins服务配置文件需要对计算机的root访问权限。 在CloudBees Jenkins Enterprise中,您可以在以下目录下找到此文件:

  • /etc/default/jenkins:大多数Linux发行版的位置
  • /etc/sysconfig/jenkins:RedHat/CentOS发行版的位置
  • C:\Program Files\Jenkins\Jenkins.xml:Windows的默认位置

与Jenkins的
2.134
一起,以下几点对我很有用:

  • JAVA\u工具\u选项=-Dmail.smtp.starttls.enable=true
  • 取消选中
    使用SSL

如果上述解决方案都不起作用,这是最好的解决方案


在@user11791348的回答中的一句话之后,我解决了这个问题

声明是:“需要注意的是,“电子邮件通知”部分用户名和“Jenkins Location”部分系统管理员电子邮件地址必须是有效的smtp.office365.com用户。如果在smtp.office365.com中找不到任何一个,您将收到“客户端无权作为此发件人发送”错误”

因此,我在Jenkins中配置了系统管理员电子邮件地址,并且我的Jenkins.xml包含以下行:

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Djava.awt.headless=true -Dmail.smtp.starttls.enable=true -jar "C:\Program Files\Jenkins\jenkins.war" --httpPort=8080 --webroot="%LocalAppData%\Jenkins\war"</arguments>
-Xrs-Xmx256m-Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle-Djava.awt.headless=true-Dmail.smtp.starttls.enable=true-jar“C:\Program Files\Jenkins\Jenkins.war”--httpPort=8080--webroot=“%LocalAppData%\Jenkins\war”
使用SSL:Unchecked 使用TLS:未选中
SMTP端口:587

在Ubuntu中,jenkins配置文件位于/etc/default/jenkins中。jenkins试图告诉我现在出现以下错误。-无法发送电子邮件com.sun.mail.SMTPSendFailedException:550 5.7.1客户端没有权限在com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)com.sun.mail.SMTPTransport.finishData(SMTPTransport.java:1862)atcom作为此发件人发送。
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Djava.awt.headless=true -Dmail.smtp.starttls.enable=true -jar "C:\Program Files\Jenkins\jenkins.war" --httpPort=8080 --webroot="%LocalAppData%\Jenkins\war"</arguments>