如何在Google Apps Script中设置Gmail自定义星标样式
在Google Apps Script中设置Gmail自定义星标
Gmail的自定义星标(如red-bang、yellow-bang、green-check)本质是系统标签,无法通过GmailApp的star()/unstar()方法直接设置,需要借助Gmail API实现。以下是具体步骤和代码示例:
1. 启用Gmail API
在脚本编辑器中:
- 点击左侧菜单的「服务」→「添加服务」
- 选择「Gmail API」并启用
2. 获取自定义星标的标签ID
每个自定义星标对应唯一的系统标签ID,先通过以下函数获取目标星标的ID:
function getCustomStarLabelId(starDisplayName) { const allLabels = Gmail.Users.Labels.list('me').labels; for (const label of allLabels) { // 匹配Gmail中自定义星标的显示名称,例如"Red bang"对应red-bang样式 if (label.name === starDisplayName) { return label.id; } } return null; }
注:自定义星标的显示名称可在Gmail设置→「星标」中查看,例如red-bang对应名称是"Red bang",yellow-bang是"Yellow bang"。
3. 给指定邮件设置自定义星标
编写函数实现添加/替换自定义星标:
function setCustomStar(message, starLabelId) { const messageId = message.getId(); // 获取邮件当前的所有标签 const currentLabels = Gmail.Users.Messages.get('me', messageId).labelIds; // 筛选出所有星标类标签(自定义星标和普通星标都属于系统标签,ID以Label_开头) const starRelatedLabels = currentLabels.filter(id => id.startsWith('Label_')); // 移除现有星标,添加目标自定义星标(如需保留普通星标,可移除这行过滤逻辑) const labelUpdate = { removeLabelIds: starRelatedLabels, addLabelIds: [starLabelId] }; // 调用API修改邮件标签(即设置自定义星标) Gmail.Users.Messages.modify(labelUpdate, 'me', messageId); }
4. 在循环中批量处理邮件
结合你的现有逻辑,遍历邮件并设置自定义星标:
function processPriorityMessages() { // 示例:搜索收件箱中需要处理的邮件,替换为你的搜索条件 const targetThreads = GmailApp.search('in:inbox has:attachment'); for (const thread of targetThreads) { const messages = thread.getMessages(); for (const thisMessage of messages) { // 获取yellow-bang星标的ID const yellowBangId = getCustomStarLabelId('Yellow bang'); if (yellowBangId) { setCustomStar(thisMessage, yellowBangId); } } } }
注意事项
- 首次运行脚本时需要授权,按照提示完成OAuth授权流程。
- 如果需要保留邮件原有的普通星标,可修改
setCustomStar函数中的removeLabelIds逻辑,只移除其他自定义星标而非所有星标类标签。
内容的提问来源于stack exchange,提问作者Trashman
相关产品推荐
相关产品推荐

