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

Jenkins:根据构建状态(成功/失败)使用不同发件人发邮件

实现Jenkins根据构建状态切换邮件发件人

核心方案:利用emailext的from参数

首先明确:emailext确实支持from参数,和to参数用法一致,之前没成功可能是写法问题或者SMTP服务器限制。下面是几种可行的实现方式:

  • 直接在Pipeline的post阶段按状态设置
    针对不同构建结果(success/failure/unstable等),分别调用emailext并指定不同的from:

    pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    sh 'echo "Build steps here"'
                }
            }
        }
        post {
            success {
                emailext(
                    to: 'success-team@your-domain.com',
                    from: 'build-success@your-domain.com',
                    subject: "[SUCCESS] ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                    body: "Build passed: ${env.BUILD_URL}"
                )
            }
            failure {
                emailext(
                    to: 'dev-oncall@your-domain.com',
                    from: 'build-alert@your-domain.com',
                    subject: "[FAILURE] ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                    body: "Build failed: ${env.BUILD_URL}"
                )
            }
        }
    }
    
  • Groovy脚本动态判断设置
    如果状态逻辑复杂,用script块动态生成发件人和收件人:

    pipeline {
        agent any
        stages {
            // 构建阶段
        }
        post {
            always {
                script {
                    def buildStatus = currentBuild.result ?: 'ABORTED'
                    def senderMap = [
                        'SUCCESS': 'success-notifier@your-domain.com',
                        'FAILURE': 'failure-alert@your-domain.com',
                        'UNSTABLE': 'warning-notifier@your-domain.com'
                    ]
                    def recipientMap = [
                        'SUCCESS': 'product-team@your-domain.com',
                        'FAILURE': 'dev-team@your-domain.com',
                        'UNSTABLE': 'qa-team@your-domain.com'
                    ]
    
                    emailext(
                        to: recipientMap[buildStatus],
                        from: senderMap[buildStatus],
                        subject: "[${buildStatus}] ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                        body: "Build status: ${buildStatus}\nDetails: ${env.BUILD_URL}"
                    )
                }
            }
        }
    }
    

注意事项(坑点)

  1. SMTP服务器限制:大部分公共SMTP服务(比如Gmail、Outlook)不允许随意修改from地址,必须使用已验证的账号作为发件人。如果是内部SMTP服务器,需要确认是否允许自定义发件地址。
  2. 全局配置覆盖问题:如果Jenkins全局邮件配置中强制设置了发件人,可能会覆盖emailext的from参数。此时需要在全局配置中开启"允许在邮件中指定发件人"选项(一般在"系统管理"->"系统配置"->"Extended E-mail Notification"里)。
  3. 多SMTP场景:如果不同发件人需要使用不同的SMTP服务器,可以在emailext中额外指定smtpServer和smtpCredentialsId参数,前提是已在Jenkins凭据中配置对应的SMTP账号:
    emailext(
        to: 'external-team@other-domain.com',
        from: 'external-notifier@other-domain.com',
        smtpServer: 'smtp.other-domain.com',
        smtpCredentialsId: 'smtp-external-creds',
        subject: 'Build Update',
        body: '...'
    )
    

内容的提问来源于stack exchange,提问作者Goul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:15:24