如何通过Apps Script获取可嵌入邮件的Google表单纯HTML版本
实现方案
核心逻辑
Google表单的/emailform路径天生返回适配邮件客户端的纯静态HTML内容:无依赖JS、所有样式内联、提交接口直接对接原表单数据后台,完全可以直接拿来当邮件内嵌表单的HTML用,不需要从零手写表单结构。
具体操作步骤
1. 拉取邮件版表单HTML
通过Apps Script的UrlFetchApp能力请求对应表单的emailform地址,这里要注意请求头的UA设置,避免拿到带动态脚本的交互版页面:
function fetchFormEmailHtml() { const targetFormUrl = "https://docs.google.com/forms/u/0/d/1WdGrnquFdUoGF6Q5WoEZl_ys_hFr6WtWO1tZiROrp1Y/emailform"; const res = UrlFetchApp.fetch(targetFormUrl, { // 模拟旧邮件客户端UA,触发Google返回纯静态邮件适配版内容 headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko" }, muteHttpExceptions: true }); return res.getContentText(); }
- *UA参数必须和旧版邮件客户端匹配,否则会拉取到带动态JS脚本的交互版页面,这类内容无法在邮件客户端中正常运行,完全不适合嵌入邮件。
- 这一步返回的HTML和Google原生发送的内嵌表单邮件内容完全一致,不需要额外做样式转码。
2. HTML内容适配
拉取到原生HTML后,只需要做两处简单调整就可以用于发送:
- 把HTML内所有相对路径的表单提交地址,替换为带完整域名的绝对提交地址,避免邮件客户端解析路径错误导致提交失败。
- 可按需删除HTML里多余的品牌跳转、外部导航元素,只保留表单输入、提交按钮的核心模块。
3. 发送内嵌表单邮件
处理完HTML后直接通过Apps Script的邮件能力发送即可:
function sendEmbeddedFormEmail(receivers) { const rawHtml = fetchFormEmailHtml(); const finalHtml = adaptHtmlForEmail(rawHtml); MailApp.sendEmail({ to: receivers.join(","), subject: "填写您的表单反馈", htmlBody: finalHtml }); }
常见踩坑提示
- 不要尝试用
FormApp原生API生成内嵌表单HTML,FormApp没有提供导出邮件适配版内容的接口,直接拉取/emailform路径是最低成本的实现方式。- 跑脚本的授权账号必须有对应Google表单的查看权限,否则拉取请求会返回账号登录提示页,拿不到有效表单内容。
- 不需要额外给HTML加外链CSS、动态脚本,这类内容会被几乎所有邮件客户端拦截,原生拉取的emailform内容本身已经符合邮件安全规范。
内容的提问来源于stack exchange,提问作者Code Guy
相关产品推荐
相关产品推荐

