Jenkins部署MuleSoft API前添加审批阶段遇邮件发送异常
Jenkins审批阶段emailext邮件未收到(post阶段mail正常)的解决方案
问题背景
在CloudHub部署MuleSoft API前添加Jenkins审批阶段,已安装Email Extension插件,流水线中使用emailext发送审批邮件时,控制台日志显示邮件已发送,但审批人无法收到;但post阶段使用原生mail步骤发送构建状态邮件完全正常。当前Jenkins版本为2.440.1。
涉及流水线代码片段:
pipeline { agent any stages { stage('Build') { steps { echo 'Building...' // 构建步骤 } } stage('Approval') { steps { script { emailext( subject: "Approval Needed for Job ${env.JOB_NAME}", body: "Please approve the build by clicking on the following link: ${env.BUILD_URL}input/", to: "approver@example.com" ) input message: 'Do you approve this build?', submitter: 'approver@example.com' } } } stage('Deploy') { steps { echo 'Deploying...' // 部署步骤 } } } }
post阶段正常工作的邮件代码:
post { failure { mail to: 'team@example.com', cc: 'team2@examlpe.com', subject: "Failed: Build ${env.JOB_NAME}", body: "Build failed ${env.JOB_NAME} and Build number: ${env.BUILD_NUMBER} .\n\n View the logs at : \n ${env.BUILD_URL}" } success { mail to: 'team@example.com', cc: 'team2@examlpe.com', subject: "Successful : Build ${env.JOB_NAME}", body: "Build Successful ${env.JOB_NAME} and Build number: ${env.BUILD_NUMBER} .\n\n View the logs at : \n ${env.BUILD_URL}" } }
排查与解决方案
1. 核对emailext与原生mail的配置差异
原生mail步骤使用Jenkins系统配置的默认邮件服务器,而emailext插件有独立的配置项,可能存在不一致:
- 进入Jenkins管理界面 → 系统配置 → 找到Extended E-mail Notification模块
- 确认以下配置与原生邮件配置完全一致:
- SMTP服务器地址、端口、加密方式(SSL/TLS)
- 发件人邮箱地址(避免因发件人不一致被邮箱服务商拦截)
- SMTP认证的用户名/密码
- 点击模块内的Test configuration按钮,输入审批人邮箱,验证测试邮件是否能正常接收
2. 优化邮件内容规避垃圾邮件过滤
emailext发送的邮件可能被判定为垃圾邮件:
- 调整邮件主题,增加辨识度:
"[Jenkins] 请审批${env.JOB_NAME}(构建编号${env.BUILD_NUMBER})" - 优化邮件正文,补充上下文信息,减少纯链接占比:
body: "您好,\n\n构建${env.JOB_NAME}(编号${env.BUILD_NUMBER})已完成预构建,等待您的审批。\n审批链接:${env.BUILD_URL}input/\n\nJenkins团队" - 检查审批人邮箱的垃圾邮件/归档文件夹,确认邮件是否被拦截
3. 修正emailext参数细节
- 确认
to参数的邮箱地址拼写正确(注意post阶段代码中存在team2@examlpe.com的拼写错误,排查审批人邮箱是否有类似问题) - 显式指定
from参数,与原生mail使用的发件人保持一致:emailext( subject: "[Jenkins] 请审批${env.JOB_NAME}构建", body: "您好,\n\n构建${env.JOB_NAME}(编号${env.BUILD_NUMBER})等待您的审批:${env.BUILD_URL}input/", to: "approver@example.com", from: "jenkins@yourcompany.com" // 与原生mail发件人一致 )
4. 简化审批通知流程
直接使用input步骤的notifyApprovers参数,让Jenkins自动发送审批通知,无需手动调用emailext:
input message: 'Do you approve this build?', submitter: 'approver@example.com', notifyApprovers: true
注:使用该参数前需确保审批人在Jenkins系统中存在账号并配置了正确的邮箱,且Jenkins默认邮件通知配置正常。
5. 开启调试日志定位问题
- 查看Jenkins系统日志(管理Jenkins → 系统日志),搜索
emailext关键字,排查是否有隐藏的发送错误(如SMTP连接超时、认证失败) - 在
emailext中添加debug: true参数,获取详细发送日志:emailext( subject: "[Jenkins] 请审批${env.JOB_NAME}构建", body: "审批链接:${env.BUILD_URL}input/", to: "approver@example.com", debug: true )
内容的提问来源于stack exchange,提问作者user25929797
相关产品推荐
相关产品推荐

