Gmail Addon开发访问当前邮件及附件时触发权限报错问题
核心问题原因
- API参数类型错误
你代码中GmailApp.getThreadById()接收的参数是邮件线程ID,但你传入的e.messageMetadata.messageId是单封邮件的唯一ID,二者属性不匹配,直接触发访问报错。 - 权限范围不匹配需求
你当前配置的OAuth范围仅支持访问当前打开的单封邮件元数据/内容,无法访问邮件所属的完整线程,也无法直接读取附件内容,不符合你获取关联邮件、下载附件的需求。
解决方案
步骤1:调整OAuth权限范围
在oauthScopes数组中添加对应权限,按需二选一:
- 仅需访问当前打开邮件所属线程的所有内容、附件:添加
https://www.googleapis.com/auth/gmail.addons.current.thread.readonly - 需要访问用户所有邮件内容:添加
https://www.googleapis.com/auth/gmail.readonly
步骤2:修正代码逻辑
调整API调用的参数和流程,示例如下:
function getDocsUI(e){ GmailApp.setCurrentMessageAccessToken(e.messageMetadata.accessToken); // 先通过消息ID获取当前单封邮件 const currentMessage = GmailApp.getMessageById(e.messageMetadata.messageId); // 如需获取所属线程的所有关联邮件,再调用getThread方法 const relatedThread = currentMessage.getThread(); const allRelatedMessages = relatedThread.getMessages(); // 读取当前邮件附件 const attachments = currentMessage.getAttachments(); return HtmlService.createHtmlOutput().append(`<div>共找到${allRelatedMessages.length}封关联邮件,${attachments.length}个附件</div>`); }
步骤3:重新授权生效
修改权限配置后需要重新部署插件,在Gmail中重新加载并授权插件,确保新的权限生效。
内容的提问来源于stack exchange,提问作者Charchit Kapoor
相关产品推荐
相关产品推荐

