如何在Apps Script发送的邮件中嵌入带回复内容的表单(如PDF)
完全可行!实现步骤+代码示例
当然可以做到!下面我会一步步教你修改现有脚本,实现「发送带已填写内容表单PDF的邮件」需求:
核心思路
- 捕获表单新提交的响应数据
- 把响应数据填充到提前准备好的表单模板(Google Docs/HTML)里
- 将填充好的模板转成PDF文件
- 把PDF作为附件(或转图片嵌入)加到指定格式的邮件中发送
具体实现步骤&代码
1. 准备表单模板(推荐用Google Docs)
先创建一个和你的表单样式一致的Google Docs文档,把需要填充回复的位置用占位符标记,比如{{姓名}}、{{联系方式}}、{{问题答案}}等,方便后续替换内容。
2. 修改Apps Script脚本
下面是完整的示例代码,你可以根据自己的表单字段调整:
function onFormSubmit(e) { // 1. 获取表单提交的响应数据 const response = e.response; const itemResponses = response.getItemResponses(); // 整理成键值对:字段名 -> 填写内容 const responseData = {}; itemResponses.forEach(itemResp => { responseData[itemResp.getItem().getTitle()] = itemResp.getResponse(); }); // 2. 填充Google Docs模板并生成PDF const templateDocId = "你的模板文档ID"; // 替换成你创建的模板Docs的ID const copyDoc = DriveApp.getFileById(templateDocId).makeCopy("临时回复文档"); const copyDocBody = DocumentApp.openById(copyDoc.getId()).getBody(); // 替换模板里的占位符 Object.keys(responseData).forEach(key => { copyDocBody.replaceText(`{{${key}}}`, responseData[key]); }); // 保存并关闭文档 DocumentApp.getActiveDocument().saveAndClose(); // 转成PDF文件 const pdfFile = copyDoc.getAs(MimeType.PDF); // 3. 发送邮件 const recipient = "接收邮件的地址"; // 替换成你的收件邮箱 const subject = "表单收到新回复"; const body = "表单收到新回复,以下是全部答案。\n\n请查看附件中的已填写表单PDF。"; // 发送带附件的邮件 GmailApp.sendEmail( recipient, subject, body, { attachments: [pdfFile], name: "表单回复通知" // 发件人名称可自定义 } ); // 清理临时文档 DriveApp.getFileById(copyDoc.getId()).setTrashed(true); }
3. 设置触发事件
- 在Apps Script编辑器中,点击左侧「触发器」图标
- 添加新触发器:选择
onFormSubmit函数,事件源选「表单提交」,保存后授权权限即可
额外说明
- 如果想把PDF直接嵌入邮件正文(而非附件),可以把PDF转成图片后嵌入,但这种方式可能会损失清晰度,且邮件客户端兼容性不一,更推荐用附件形式
- 如果你不想用Google Docs模板,也可以直接用HTML生成表单内容,再通过
HtmlService.createHtmlOutput()转成PDF,这种方式更灵活,适合自定义样式 - 确保你的脚本有足够的权限:需要授权访问Google Drive、Gmail、表单数据等
内容的提问来源于stack exchange,提问作者mias
相关产品推荐
相关产品推荐

