Jenkins Docker镜像配置SMTP发件失败,咨询镜像修改方案
解决Jenkins Docker镜像配置邮件通知的问题(针对530 5.7.57认证错误)
先说说这个错误到底咋回事:
com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM
你用的是Outlook的SMTP服务器,它根本不允许匿名发送邮件,必须提供你的邮箱账号和密码(或者应用密码)做认证才行。接下来咱们从Docker镜像调整和Jenkins内部配置两方面搞定这个问题。
一、修改Jenkins Docker镜像的两种思路
思路1:自定义Docker镜像(预装插件+固化基础配置)
如果你希望每次启动容器都自带邮件相关插件,不用每次手动安装,可以自己构建个自定义镜像:
- 先创建一个
Dockerfile文件,内容如下:
# 基于官方LTS版本的Jenkins镜像 FROM jenkins/jenkins:lts # 切换到root用户,方便后续操作 USER root # 预装邮件相关的核心插件:原生邮件插件和增强版的Email Extension(功能更全) RUN jenkins-plugin-cli --plugins email-ext:latest mailer:latest # (可选)如果你提前导出了Jenkins的邮件配置文件,可以复制到镜像里,省得每次配置 # COPY ./hudson.tasks.Mailer.xml /var/jenkins_home/hudson.tasks.Mailer.xml # 切回jenkins用户,符合官方镜像的权限规范 USER jenkins
- 执行命令构建自定义镜像:
docker build -t my-custom-jenkins:lts .
思路2:挂载本地配置目录(不用改镜像,灵活度更高)
要是不想折腾自定义镜像,更推荐直接把本地目录挂载到容器的/var/jenkins_home,这样你的配置会持久化保存,后续修改也不用重新构建镜像:
先在本地创建个目录存Jenkins配置:
mkdir -p ~/jenkins_home chown -R 1000:1000 ~/jenkins_home # 匹配Jenkins容器内的用户权限
然后修改你原来的运行命令,加上挂载参数:
docker run -u 0 --name myjenkins1 -p 8081:8080 -p 50001:50000 \ -v ~/jenkins_home:/var/jenkins_home \ jenkins/jenkins:lts
二、Jenkins后台的关键邮件配置(核心步骤)
不管用哪种镜像方式,最后都得在Jenkins后台把SMTP参数配置对,这才是解决认证错误的关键:
- 打开Jenkins后台(http://localhost:8081),点击左侧菜单的Manage Jenkins > Configure System
- 找到E-mail Notification(或者装了Email Extension插件的话找Extended E-mail Notification),按下面的参数填:
- SMTP服务器:Outlook的话填
smtp.office365.com - SMTP端口:选587(TLS加密端口)
- Use SMTP Authentication:必须勾选!然后填入你的Outlook邮箱账号(比如
xxx@outlook.com)和密码——注意:如果你的微软账号开了两步验证,不能用原密码,得去微软账户安全中心创建一个应用密码来填这里 - Use TLS:勾选上,确保连接是加密的
- Default Recipients:填上你要接收通知的邮箱地址
- SMTP服务器:Outlook的话填
- 点击Test configuration发个测试邮件,能收到就说明配置成了!
三、踩坑排查小技巧
- 要是测试邮件还失败,先检查两步验证:开了两步验证的微软账号,必须用应用密码,原密码肯定不行
- 确认SMTP参数没填错:Outlook的SMTP服务器就是
smtp.office365.com,端口587,别搞混了 - 检查容器能不能连外网:进容器里ping一下SMTP服务器,看看网络通不通:
docker exec -it myjenkins1 ping smtp.office365.com
内容的提问来源于stack exchange,提问作者Chinmay Kulkarni
相关产品推荐
相关产品推荐

