Jenkins 和 Office365 邮件通知设置
Jenkins and Office365 email notification settings
环境:
- Windows 2008 R2
- 詹金斯 1.580.2 LTS
- 邮件插件 1.12
- 电子邮件扩展插件 2.39
- Java 8
我在配置我的 Jenkins CI 服务器以在移动到 Office365 中的企业帐户后发送电子邮件通知时遇到一些问题。
所以这是我的配置:
- Jenkins 以 StartTLS 支持启动(带参数
'-Dmail.smtp.starttls.enabled=真')
- SMTP 服务器是 'smtp.office365.com'
- SMTP 端口为 587
- SSL 已禁用 SMTP 身份验证
- 账号真实,密码正确
- 帐户指定为 用户名@company.com
看起来应该可以正确发送邮件,但未发送电子邮件。
出现以下错误:
Failed to send out e-mail
com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1580)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1097)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at hudson.tasks.Mailer$DescriptorImpl.doSendTestMail(Mailer.java:527)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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.doDispatch(MetaClass.java:121)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:745)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:875)
at org.kohsuke.stapler.MetaClass.doDispatch(MetaClass.java:249)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:745)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:875)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:648)
at org.kohsuke.stapler.Stapler.service(Stapler.java:237)
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.doFilter(PluginServletFilter.java:96)
at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:58)
at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:99)
at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
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.doFilter(ChainedServletFilter.java:84)
at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:87)
at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:87)
at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:86)
at hudson.security.ChainedServletFilter.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.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:46)
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: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:235)
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.run(SelectChannelEndPoint.java:52)
at winstone.BoundedExecutorService.run(BoundedExecutorService.java:77)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
有人可以帮我解决这个问题吗?
谢谢
未启用 TLS。
只需在开始时为 Jenkins 添加下一个 java 属性:
-Dmail.smtp.starttls.enable=true
所以对于Ubuntu可以在这里配置:
home/ubuntu# grep ^JAVA_ARGS /etc/default/jenkins
JAVA_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
步数:
- 打开邮件发件人的调试
检查您的第一个调试信息中是否有以下内容。
DEBUG: setDebug: JavaMail version 1.3
请将您的 JavaMail 版本升级到高于 1.4 的版本,无需更改任何代码即可修复。
我使用 SMTP 端口 25 而不是 587 并且有效
如果您使用的是 AWS EC2 AMI Linux,那么这是一个常见问题。您需要编辑 /etc/sysconfig/jenkins 并重新启动 Jenkins。
两者都需要
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=真-Dmail.smtp.starttls.enable=真"
和
JENKINS_ARGS="-Dmail.smtp.starttls.enable=true"
查看此处的答案后,我仍然遇到错误:
Client does not have permissions to send as this sender
所以我错过了设置 系统管理员电子邮件地址 并且一切正常 - 可能是使用系统管理员电子邮件连接邮箱的电子邮件插件.
以下是配置邮件通知(也包括电子邮件分机)的所有步骤:
去管理 jenkins > 配置系统:
在 Jenkins 位置下
System Admin e-mail address: notification@domain.com
在扩展电子邮件通知下:
SMTP server: smtp.office365.com
Default user e-mail suffix: @domain.com
User Name: notification@domain.com
Password: ###########
Use SSL: no
SMTP Port: 25 or 587
Charset UTF-8
编辑文件:“/etc/default/jenkins”
sudo vim /etc/default/jenkins
添加行:
JAVA_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
重启詹金斯
sudo /etc/init.d/jenkins restart
测试于 ubuntu 16
如果您在 Kubernetes 中使用 Jenkins,请在您的 YAML 文件中添加以下行,并确保您在 "System Admin e-mail address: "
中有相同的电子邮件
containers:
...
env:
- name: JENKINS_OPTS
value: "-Dmail.smtp.starttls.enable=true"
- name: JENKINS_JAVA_OPTIONS
value: "-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
- name: JAVA_OPTS
value: >-
-Djava.awt.headless=true
-Dmail.smtp.starttls.enable=true
根据我的测试,只需要以下参数:
- 系统管理员邮箱:bunny@acme.com
- SMTP 服务器:smtp.office365.com
- SMTP 端口:587
- SMTP 用户名:bunny@acme.com
- SMTP 密码:***
- 使用 SSL:否
- 字符集 UTF-8
如果你不想 touch/restart 你的詹金斯处于低水平 (-Dmail.smtp.starttls.enable=true
) 只需添加
mail.smtp.starttls.enable = true
到 高级电子邮件属性
环境:
- Windows 2008 R2
- 詹金斯 1.580.2 LTS
- 邮件插件 1.12
- 电子邮件扩展插件 2.39
- Java 8
我在配置我的 Jenkins CI 服务器以在移动到 Office365 中的企业帐户后发送电子邮件通知时遇到一些问题。 所以这是我的配置:
- Jenkins 以 StartTLS 支持启动(带参数 '-Dmail.smtp.starttls.enabled=真')
- SMTP 服务器是 'smtp.office365.com'
- SMTP 端口为 587
- SSL 已禁用 SMTP 身份验证
- 账号真实,密码正确
- 帐户指定为 用户名@company.com
看起来应该可以正确发送邮件,但未发送电子邮件。
出现以下错误:
Failed to send out e-mail
com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1580)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1097)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at hudson.tasks.Mailer$DescriptorImpl.doSendTestMail(Mailer.java:527)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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.doDispatch(MetaClass.java:121)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:745)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:875)
at org.kohsuke.stapler.MetaClass.doDispatch(MetaClass.java:249)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:745)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:875)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:648)
at org.kohsuke.stapler.Stapler.service(Stapler.java:237)
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.doFilter(PluginServletFilter.java:96)
at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:58)
at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:99)
at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
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.doFilter(ChainedServletFilter.java:84)
at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:87)
at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:87)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:87)
at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:86)
at hudson.security.ChainedServletFilter.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.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:46)
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: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:235)
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.run(SelectChannelEndPoint.java:52)
at winstone.BoundedExecutorService.run(BoundedExecutorService.java:77)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
有人可以帮我解决这个问题吗? 谢谢
未启用 TLS。
只需在开始时为 Jenkins 添加下一个 java 属性:
-Dmail.smtp.starttls.enable=true
所以对于Ubuntu可以在这里配置:
home/ubuntu# grep ^JAVA_ARGS /etc/default/jenkins
JAVA_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
步数:
- 打开邮件发件人的调试
检查您的第一个调试信息中是否有以下内容。
DEBUG: setDebug: JavaMail version 1.3
请将您的 JavaMail 版本升级到高于 1.4 的版本,无需更改任何代码即可修复。
我使用 SMTP 端口 25 而不是 587 并且有效
如果您使用的是 AWS EC2 AMI Linux,那么这是一个常见问题。您需要编辑 /etc/sysconfig/jenkins 并重新启动 Jenkins。
两者都需要
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=真-Dmail.smtp.starttls.enable=真"
和
JENKINS_ARGS="-Dmail.smtp.starttls.enable=true"
查看此处的答案后,我仍然遇到错误:
Client does not have permissions to send as this sender
所以我错过了设置 系统管理员电子邮件地址 并且一切正常 - 可能是使用系统管理员电子邮件连接邮箱的电子邮件插件.
以下是配置邮件通知(也包括电子邮件分机)的所有步骤:
去管理 jenkins > 配置系统:
在 Jenkins 位置下
System Admin e-mail address: notification@domain.com
在扩展电子邮件通知下:
SMTP server: smtp.office365.com
Default user e-mail suffix: @domain.com
User Name: notification@domain.com
Password: ###########
Use SSL: no
SMTP Port: 25 or 587
Charset UTF-8
编辑文件:“/etc/default/jenkins”
sudo vim /etc/default/jenkins
添加行:
JAVA_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
重启詹金斯
sudo /etc/init.d/jenkins restart
测试于 ubuntu 16
如果您在 Kubernetes 中使用 Jenkins,请在您的 YAML 文件中添加以下行,并确保您在 "System Admin e-mail address: "
中有相同的电子邮件containers:
...
env:
- name: JENKINS_OPTS
value: "-Dmail.smtp.starttls.enable=true"
- name: JENKINS_JAVA_OPTIONS
value: "-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
- name: JAVA_OPTS
value: >-
-Djava.awt.headless=true
-Dmail.smtp.starttls.enable=true
根据我的测试,只需要以下参数:
- 系统管理员邮箱:bunny@acme.com
- SMTP 服务器:smtp.office365.com
- SMTP 端口:587
- SMTP 用户名:bunny@acme.com
- SMTP 密码:***
- 使用 SSL:否
- 字符集 UTF-8
如果你不想 touch/restart 你的詹金斯处于低水平 (-Dmail.smtp.starttls.enable=true
) 只需添加
mail.smtp.starttls.enable = true
到 高级电子邮件属性