You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:32:07