GAS发送含Web App链接草稿时意外触发doGet请求的解决方法
GAS嵌入Web App链接的Gmail草稿调用
draft.send()时意外触发请求问题 前置验证结论
经多轮试错验证:名下所有同类脚本均存在相同表现,此前看似表现不同的脚本仅因草稿发送速度更快,短时间内向
doGet()发起过多请求,导致多数场景下请求未被正常执行,本质上发送草稿的操作仍会触发请求。
开发目标
在邮件正文中嵌入基于GAS开发的doGet()类型Web App链接,链接携带唯一用户标识参数,仅当收件人手动点击链接时才触发Web App逻辑,识别收件人身份完成后续操作,当前手动点击触发的逻辑本身可正常运行。
现有实现逻辑
两套遵循相同开发逻辑的脚本,均通过如下代码创建带嵌入链接的Gmail草稿:
var url_to_webapp = 'https://script.google.com/macros/s/AKf...VJ/exec?to=<email_address>&userID=<userID>&removalCode=<removalCode>' var html = some html... var htmlBody = html + url_to_webapp // 纯文本形式拼接的链接会被Gmail自动转换为<a>标签 var draft = GmailApp.createDraft(EmailAddress, emailSubject, msgBody, { from: thisAlias, name: name, replyTo: thisAlias, htmlBody: htmlBody }); var draftID = draft.getId();
所有URL参数均通过encodeURIComponent(UserID.replace(/'/g, ""))逻辑做编码处理。
调用如下代码发送草稿时出现异常:
var draft = GmailApp.getDraft(draftID); draft.send();
异常表现:Web App会在草稿发送瞬间就收到请求,意外执行业务逻辑,不符合「仅用户点击链接才触发请求」的预期。
存在对照情况:另一套脚本使用完全相同的代码逻辑、生成同格式链接(关联不同项目下的独立Web App)、从同一Gmail账号发送草稿,却不会触发该问题。
已尝试排查方案(均未解决问题)
- 多次复制关联电子表格及绑定的脚本项目
- 禁用可追踪外发邮件的Streak插件
- 检查外发链接发现,草稿创建后Gmail会自动在链接
href属性后追加data-saferedirecturl="https://www.google.com/url?q=https://script.google.com/macros/s/AKf...&source=gmail&ust=1656656998227000&usg=AOvVaw1p-L0mcxAZU1pyimSRufks"谷歌跳转属性,经测试直接访问该跳转链接确实会触发Web App请求,但另一套正常运行的脚本生成的外发邮件同样追加了该属性,发送时却不会触发请求 - 测试嵌入基于
doGet(e)的邮件打开追踪像素,同样出现「发送草稿时触发请求、用户打开邮件时再次触发」的现象,说明该触发行为在特定场景下属于Gmail预设机制 - 若通过Gmail网页端GUI手动点击发送按钮发送同一生成的草稿,不会触发Web App请求,仅通过代码调用
draft.send()方法发送时才会出现意外触发问题
待解决问题
- 如何阻止发送草稿时产生的意外请求到达Web App?
- 什么原因导致部分脚本发送同类型草稿时不会触发该异常(即符合预期效果)?
内容的提问来源于stack exchange,提问作者Doctor Words
相关产品推荐
相关产品推荐

