如何通过Gmail插件获取邮件正文中的选中文本
实现Gmail插件同步邮件正文选中文本的方案
由于Gmail插件的沙箱隔离机制,无法直接监听邮件正文的文本选中事件,只能通过用户主动触发的方式来获取选中内容,以下是官方支持的可行方案:
核心思路
通过给Gmail添加自定义上下文右键菜单,用户选中文本后点击菜单选项,触发插件获取并同步选中内容到侧边卡片中。
具体实现步骤
1. 注册上下文菜单
在插件的onInstall和onOpen函数中,创建右键菜单:
function onInstall(e) { onOpen(e); } function onOpen(e) { const ui = GmailApp.getUi(); // 添加仅在文本选中时显示的右键菜单 ui.createAddonMenu() .addItem('同步选中文本到插件', 'syncSelectedText') .addToUi(); }
2. 处理选中文本同步逻辑
编写回调函数获取选中文本,并更新插件侧边栏的卡片内容:
function syncSelectedText(e) { // 从事件参数中获取用户选中的文本 const selectedText = e.selectedText; // 无选中文本时提示用户 if (!selectedText) { const emptyCard = CardService.newCardBuilder() .setHeader(CardService.newCardHeader().setTitle('提示')) .addSection(CardService.newCardSection() .addWidget(CardService.newTextParagraph().setText('请先选中邮件正文中的文本内容'))) .build(); return CardService.newActionResponseBuilder() .setNavigation(CardService.newNavigation().updateCard(emptyCard)) .build(); } // 创建展示选中文本的卡片 const contentCard = CardService.newCardBuilder() .setHeader(CardService.newCardHeader().setTitle('已同步选中内容')) .addSection(CardService.newCardSection() .addWidget(CardService.newTextParagraph().setText(`你选中的文本:\n${selectedText}`))) .build(); // 更新插件侧边栏的卡片 return CardService.newActionResponseBuilder() .setNavigation(CardService.newNavigation().updateCard(contentCard)) .build(); }
3. 配置插件权限
确保在appsscript.json中配置正确的权限范围:
{ "oauthScopes": [ "https://www.googleapis.com/auth/gmail.addons.execute", "https://www.googleapis.com/auth/gmail.readonly" ], "gmail": { "name": "文本同步插件", "logoUrl": "", "contextualTriggers": [ { "unconditional": {}, "onTriggerFunction": "syncSelectedText" } ], "primaryColor": "#4285F4", "secondaryColor": "#4285F4" } }
注意事项
- 无法实现“实时自动同步”:受限于Gmail插件的沙箱机制,不能直接监听邮件正文的选中事件,必须通过用户点击菜单触发。
- 上下文菜单仅在用户选中邮件正文文本时才会显示(Gmail自动控制)。
- 测试时需要将插件部署为测试版本,在Gmail中启用后才能看到右键菜单。
内容的提问来源于stack exchange,提问作者Poojan3037
相关产品推荐
相关产品推荐

