Youtrack工作流邮件发送报错求助:评论触发时通知工单创建人
YouTrack脚本错误排查与修正
错误原因分析
1. API方法误用
YouTrack脚本API里根本没有notifications.email()这个方法,正确构造邮件的方法是notifications.buildEmail(),这就是你报TypeError的直接原因。
2. 触发逻辑与收件人问题
- 原脚本的
guard直接返回true,会在工单任何变更时都触发,完全不符合你“只有添加评论时发邮件”的需求; - 硬写固定邮箱不仅不灵活,还容易出现空值或无效邮箱,应该动态取工单创建人的邮箱,同时要先检查这个邮箱是否存在,不然就会触发“收件人列表为空”的报错。
修正后的完整代码
var entities = require('@jetbrains/youtrack-scripting-api/entities'); var notifications = require('@jetbrains/youtrack-scripting-api/notifications'); exports.rule = entities.Issue.onChange({ title: '评论新增时给创建人发邮件', guard: function(ctx) { // 只有新增评论时才触发脚本 return ctx.issue.comments.added.isNotEmpty(); }, action: function(ctx) { var issue = ctx.issue; var creator = issue.reporter; // 获取工单创建人 // 先检查创建人是否存在且有邮箱,避免空收件人报错 if (!creator || !creator.email) { console.warn('工单创建人不存在或未设置邮箱,无法发送邮件'); return; } // 获取刚添加的最新评论内容 var newComment = ctx.issue.comments.added.first(); var commentContent = newComment.text; // 构造带评论内容的HTML邮件 var emailTemplate = '<html><body>' + '<p>工单 {{issue.id}} 新增了一条评论:</p>' + '<p><strong>评论内容:</strong><br>' + commentContent + '</p>' + '<p>工单标题:{{issue.summary}}</p>' + '<p>当前状态:{{issue.State.name}}</p>' + '</body></html>'; // 使用正确的API方法构造邮件 var email = notifications.buildEmail({ to: [creator.email], // 动态使用创建人的邮箱 subject: '工单 ' + issue.id + ' 新增评论通知', body: emailTemplate }); notifications.send(email); } });
关键修改点说明
- 修正API调用:把错误的
notifications.email()换成官方要求的notifications.buildEmail(); - 限制触发条件:通过
ctx.issue.comments.added.isNotEmpty()确保脚本只在新增评论时运行; - 优化收件人逻辑:动态获取工单创建人(
issue.reporter),先做非空检查,避免因无邮箱导致的报错; - 添加评论内容:通过
comments.added.first()拿到最新评论,嵌入到邮件里; - 修复模板转义:原代码里的
<这类转义字符不需要,直接写<>就行,YouTrack能正确解析HTML模板。
内容的提问来源于stack exchange,提问作者Torben216
相关产品推荐
相关产品推荐

