能否使用Gmail Apps Script实时分析撰写中邮件并实现自动触发功能?
针对Gmail草稿实时操作与自动触发扩展的解决方案
一、实现草稿邮件近似"onChange"的实时分析效果
Gmail Apps Script 没有原生的草稿内容实时变更触发器,但可以通过定时轮询草稿箱的方式实现近似效果:
核心思路
- 创建定时触发器,周期性检查草稿箱内的邮件
- 对比草稿的上次修改时间或内容哈希值,判断是否有更新
- 检测到更新时执行自定义分析/操作函数
示例代码
// 初始化:创建1分钟间隔的定时触发器(仅需执行一次) function createDraftMonitorTrigger() { ScriptApp.newTrigger('checkDraftChanges') .timeBased() .everyMinutes(1) // 最小间隔为1分钟,受限于Apps Script触发器限制 .create(); } // 检查草稿变更的核心函数 function checkDraftChanges() { const drafts = GmailApp.getDrafts(); const properties = PropertiesService.getUserProperties(); drafts.forEach(draft => { const draftId = draft.getId(); const lastUpdated = draft.getMessage().getLastUpdated(); const storedTime = properties.getProperty(`draft_${draftId}_lastUpdated`); // 首次检测或草稿已更新 if (!storedTime || new Date(lastUpdated) > new Date(storedTime)) { // 执行你的自定义分析/操作逻辑 analyzeDraftContent(draft.getMessage()); // 更新存储的最后修改时间 properties.setProperty(`draft_${draftId}_lastUpdated`, lastUpdated); } }); } // 自定义草稿内容分析函数 function analyzeDraftContent(message) { const subject = message.getSubject(); const body = message.getPlainBody(); // 这里添加你的实时分析逻辑,比如关键词检测、格式校验等 console.log(`分析草稿:主题=${subject},内容长度=${body.length}`); }注意事项
- 定时触发器最小间隔为1分钟,无法做到毫秒级实时,适合非强实时需求
- 避免过于频繁的轮询,防止触发Apps Script的配额限制
- 可以通过存储内容哈希值替代修改时间,更精准检测内容变更(需处理长文本哈希性能问题)
二、新邮件撰写时自动触发扩展打开
纯Apps Script无法实现自动打开扩展(Gmail侧边栏/编辑器插件),需结合Chrome扩展监听Gmail页面事件来实现:
核心思路
- 开发Chrome扩展,监听Gmail撰写页面的加载事件
- 当检测到用户打开新撰写窗口时,调用Apps Script的API触发扩展侧边栏显示
- 提前完成Apps Script扩展的授权,确保无需用户手动点击
关键步骤
- Chrome扩展部分:在
content.js中监听页面DOM变化,识别撰写页面加载// Chrome扩展content.js const observer = new MutationObserver((mutations) => { // 检测Gmail撰写窗口的特征元素(可根据实际DOM结构调整) const composeWindow = document.querySelector('.aeJ'); if (composeWindow && !window.extensionTriggered) { window.extensionTriggered = true; // 调用Apps Script的侧边栏打开函数(需提前配置消息通信) chrome.runtime.sendMessage({action: 'openGmailAddon'}); } }); observer.observe(document.body, {childList: true, subtree: true}); - Apps Script部分:配置可被外部调用的函数,用于打开侧边栏
// Apps Script代码 function openComposeSidebar() { const html = HtmlService.createHtmlOutputFromFile('sidebar') .setWidth(300) .setHeight(400); GmailApp.setSidebarHtml(html); } // 配置可被Chrome扩展调用的端点(需部署为Web App) function doGet(e) { openComposeSidebar(); return ContentService.createTextOutput('Sidebar opened'); } - 部署与授权:将Apps Script部署为Web App,允许匿名或特定用户访问;Chrome扩展中通过Web App URL触发打开操作
- Chrome扩展部分:在
注意事项
- 需遵守Chrome扩展的权限规则,申请
https://mail.google.com/*的访问权限 - Gmail的DOM结构可能会更新,需定期调整元素选择器
- 首次使用仍需用户完成Apps Script的授权流程
- 需遵守Chrome扩展的权限规则,申请
内容的提问来源于stack exchange,提问作者pianoman
相关产品推荐
相关产品推荐

