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

如何获取/重新生成Jenkins Mailer插件构建失败后的邮件文本

获取Jenkins Mailer插件构建失败邮件文本的可行方案

嘿,我刚好处理过类似的需求,给你几个靠谱的路子来拿到Mailer插件发送的邮件文本,赋值给String emailText做自定义解析:

1. 用Groovy脚本直接生成/捕获邮件内容

Jenkins自带的Groovy支持可以轻松模拟或拦截Mailer插件的邮件内容,适合快速验证和实现。你可以把这段脚本加到构建后步骤里,或者在脚本控制台测试:

def build = currentBuild
// 找到当前项目的Mailer配置
def mailer = build.project.getPublishersList().find { it instanceof hudson.tasks.Mailer }

if (mailer && build.result == hudson.model.Result.FAILURE) {
    // 生成和Mailer插件一致的邮件主题和正文
    def emailSubject = mailer.getSubject() ?: "Build failed: ${build.fullDisplayName}"
    def emailBody = """Build ${build.fullDisplayName} failed.
Build URL: ${build.absoluteUrl}
Recent Changes:
${build.changeSets.collect { cs ->
    cs.items.collect { change -> "- ${change.author.displayName}: ${change.msg}" }.join('\n')
}.join('\n')}"""
    
    // 赋值给你需要的变量
    String emailText = "Subject: ${emailSubject}\n\n${emailBody}"
    
    // 这里可以直接加你的自定义解析逻辑,比如打印、存储或调用外部接口
    println("Captured email content:\n${emailText}")
}

这个脚本生成的内容和Mailer插件实际发送的邮件几乎完全一致,不需要修改插件本身。

2. 通过Jenkins扩展点底层拦截邮件

如果需要更稳定的全局拦截,可以实现Mailer插件的扩展接口,在邮件发送前直接拿到完整文本。你可以把这段代码打包成小插件,或者放到Jenkins的init.groovy.d目录下:

import hudson.tasks.Mailer;
import hudson.model.AbstractBuild;
import hudson.model.TaskListener;
import jenkins.model.Jenkins;

public class CustomMailCapture extends Mailer.Resolver {
    @Override
    public String resolveBody(AbstractBuild<?, ?> build, TaskListener listener) {
        // 获取原始邮件正文
        String originalBody = super.resolveBody(build, listener);
        // 拼接完整邮件文本(包含主题)
        String emailSubject = build.getDisplayName() + " - Build Failed";
        String emailText = "Subject: " + emailSubject + "\n\n" + originalBody;
        
        // 这里做你的自定义解析,比如写入日志、存储到数据库等
        listener.getLogger().println("Captured full email text:\n" + emailText);
        
        // 返回原始正文,不影响邮件正常发送
        return originalBody;
    }
}

// 注册扩展
Jenkins.get().getExtensionList(Mailer.Resolver.class).add(new CustomMailCapture());

这种方法会全局生效,所有使用Mailer插件的项目发送失败邮件时,都会触发这段逻辑。

3. 用Shell/Batch脚本拼接邮件内容

如果不想碰代码,也可以利用Jenkins的环境变量,在构建失败后直接拼接出邮件内容:

# 仅在构建失败时执行
if [ "$BUILD_STATUS" = "FAILURE" ]; then
    SUBJECT="Build failed: ${JOB_NAME} #${BUILD_NUMBER}"
    BODY="Build URL: ${BUILD_URL}\n\nRecent Changes:\n$(git log --pretty=format:"%an - %s" HEAD~5..HEAD)"
    EMAIL_TEXT="Subject: ${SUBJECT}\n\n${BODY}"
    
    # 把内容写入文件,供后续自定义解析脚本读取
    echo -e "${EMAIL_TEXT}" > /path/to/email_content.txt
fi

这种方式简单粗暴,适合快速实现需求,不需要了解Jenkins的内部API。

如果你的初步尝试遇到了具体问题(比如脚本报错、内容不符合预期),可以把代码贴出来,我再帮你调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:27:12