如何通过outlook配置Jenkins电子邮件通知?


7

我提到了这个文档,并按如下方式配置了MS 365,但它引发了异常。我用465端口尝试了它,但它仍然失败了,也没有检查Use SSL

在此输入图像描述

但它抛出了这个例外

javax.mail.MessagingException: Could not connect to SMTP host: smtp.office365.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)

    at javax.mail.Transport.send(Transport.java:124)

    at hudson.tasks.Mailer$DescriptorImpl.doSendTestMail(Mailer.java:514)

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

    at java.lang.reflect.Method.invoke(Method.java:597)

    at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:298)

    at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:161)

    at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:96)

    at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:121)

    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)

    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)

    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)

    at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)

    at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)

    at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)

    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)

    at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)

    at org.kohsuke.stapler.Stapler.service(Stapler.java:238)

    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)

    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)

    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)

    at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:123)

    at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:58)

    at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:120)

    at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:114)

    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)

    at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)

    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)

    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)

    at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)

    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

    at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)

    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

    at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)

    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

    at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)

    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

    at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)

    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

    at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)

    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

    at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)

    at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)

    at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

    at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)

    at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)

    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)

    at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)

    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)

    at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)

    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)

    at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)

    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)

    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)

    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)

    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)

    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)

    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)

    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)

    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)

    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)

    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)

    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)

    at org.eclipse.jetty.server.Server.handle(Server.java:370)

    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)

    at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960)

    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021)

    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)

    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)

    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)

    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)

    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)

    at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

    at java.lang.Thread.run(Thread.java:619)

Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

    at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.java:523)

    at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:355)

    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:789)

    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)

    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1139)

    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)

    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:507)

    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)

    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)

    ... 82 more

Answers:


4

您需要将此java参数添加到Jenkins命令行:

-Dmail.smtp.starttls.enable=true      # Starts TLS for Office365 SMTP Authentication

要做到这一点,你必须找到在系统启动时启动Jenkins的脚本。在Mac上,使用标准的Jenkins安装,它将位于“/ Library / Application Support / Jenkins / jenkins-runner.sh”中

看起来像这样:

#!/bin/bash
#
# Startup script used by Jenkins launchd job.
# Mac OS X launchd process calls this script to customize
# the java process command line used to run Jenkins.
#
# Customizable parameters are found in
# /Library/Preferences/org.jenkins-ci.plist
#
# You can manipulate it using the "defaults" utility.
# See "man defaults" for details.

defaults="defaults read /Library/Preferences/org.jenkins-ci"

war=`$defaults war` || war="/Applications/Jenkins/jenkins.war"

javaArgs="-Dfile.encoding=UTF-8"
javaArgs="$javaArgs -Djava.awt.headless=true"
javaArgs="$javaArgs -Dmail.smtp.starttls.enable=true"
javaArgs="$javaArgs  -Dorg.apache.commons.jelly.tags.fmt.timeZone=America/Vancouver"
javaArgs="$javaArgs -Dhudson.DNSMultiCast.disabled=true"
...

嗨@jpadams我在我的Jenkins.xml文件中添加了JAVA参数但仍然存在同样的问题<executable> java </ executable> <arguments> -Xrs -Xmx256m -Dhudson.lifecycle = hudson.lifecycle.WindowsServiceLifecycle -jar“%BASE %\ jenkins.war“--httpPort = 8080 -Dmail.smtp.starttls.enable = true </ arguments>如果你有任何解决方案,请告诉我
Swapnil Kotwal 2015年

注意: - 我已重新启动Jenkins但问题尚未解决:(
Swapnil Kotwal 2015年

在465端口我有连接超时javax.mail.MessagingException:无法连接到SMTP主机:smtp.office365.com,端口:465; 嵌套异常是:java.net.ConnectException:连接超时:connect
Swapnil Kotwal 2015年

Java参数需要在-jar参数之前:java -Xrs -Xmx256m -Dmail.smtp.starttls.enable = true -Dhudson.lifecycle = hudson.lifecycle.WindowsServiceLifecycle -jar“%BASE%\ jenkins.war”--httpPort = 8080
jpadams 2015年

也没有更好的运气使用它:(注意: - 我的Jenkins在端口8181上运行。这是它的原因吗?<arguments> -Xrs -Xmx256m -Dmail.smtp.starttls.enable = true -Dhudson.lifecycle = hudson.lifecycle .WindowsServiceLifecycle -jar“%BASE%\ jenkins.war”--httpPort = 8181 </ arguments>
Swapnil Kotwal 2015年

4

最后我可以找出问题所在。我已经错过了

Default user e-mail suffix =  @mycompany.com

另外,我取消选中

Use SSL

在Jenkins根目录的Jenkins.xml文件中添加了以下参数

-Dmail.smtp.starttls.enable=true      # Starts TLS for Office365 SMTP Authentication

这些是我最后的改变

1. SMTP server=smtp.office365.com
2. Default user e-mail suffix=@mycompany.com
3. Use SMTP Authentication (Checked)
4. User Name = my-name@mycompany.com
5. password = ********************

 **6. Use SSL (Un-Checked)**

7. SMTP Port = 587
8. Reply-To Address = my-name@mycompany.com
9. Charset = UTF8

这是Screen Shot

BOOOM ...... !!!


作为旁注,请记住将系统管理员电子邮件地址设置为与电子邮件通知的用户名相同的地址。这个答案帮助
法比奥

我尝试了你给你的方式。但无法解决问题。我需要重启任何服务吗?在我的情况下,我在我的容器内运行jenkins blue ocean。我在这里发布了相关的问题 - stackoverflow.com/questions/52077290 / ...
Yogesh Jilhawar

1

从war文件开始使用jenkins

java -Dmail.smtp.starttls.enable="true" -jar jenkins.war --httpPort=9090
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.