如何向Google表单提交的邮箱发通知?脚本读取邮箱失败求助
解决Google表单脚本无法获取提交邮箱的问题
问题根源
你的脚本中sendEmail函数使用的是硬编码的<EMAIL_ADDRESS>,没有从用户提交的表单响应中提取实际填写的邮箱地址,导致无法向提交者发送通知。
修改方案
- 提取用户提交的邮箱地址:在
onFormSubmit函数中,遍历表单响应时,识别出邮箱对应的表单项,提取用户填写的邮箱值。 - 传递邮箱参数:将提取到的邮箱地址作为参数传给
sendEmail函数。 - 修改
sendEmail函数:接收邮箱参数,用它作为收件人地址。
修改后的完整代码
//@OnlyCurrentDoc function createFormSubmitTrigger() { var form = FormApp.getActiveForm(); var currentTriggers = ScriptApp.getProjectTriggers(); if(currentTriggers.length > 0) return; ScriptApp.newTrigger("onFormSubmit").forForm(form).onFormSubmit().create(); } function onFormSubmit(e) { var formResponse = e.response; var itemResponses = formResponse.getItemResponses(); var emailBody = "New form response:\n\n"; var userEmail = ""; // 遍历响应,收集内容并提取邮箱 itemResponses.forEach(function(itemResponse) { var title = itemResponse.getItem().getTitle(); var response = itemResponse.getResponse(); emailBody += title + "\n" + response + "\n\n"; // 方式1:通过题目名称匹配(替换成你表单中邮箱题目的实际标题) if(title === "邮箱地址") { userEmail = response; } // 方式2:通过表单项类型匹配(更可靠,无需依赖标题) // if(itemResponse.getItem().getType() === FormApp.ItemType.EMAIL) { // userEmail = response; // } }); // 确保获取到邮箱后再发送 if(userEmail) { sendEmail(userEmail, emailBody); } } function sendEmail(recipientEmail, emailBody) { MailApp.sendEmail(recipientEmail, "New form response", emailBody); }
注意事项
- 匹配邮箱项:如果用方式1,需要将
"邮箱地址"替换成你表单中邮箱题目的实际标题;方式2会自动识别所有邮箱类型的表单项,优先推荐这种方式,避免标题修改导致失效。 - 重新部署触发器:如果之前已经创建过触发器,建议先删除旧触发器,再重新运行
createFormSubmitTrigger函数创建新的触发器。 - 权限验证:首次运行脚本时,需要授权Google Apps Script访问表单和发送邮件的权限。
内容的提问来源于stack exchange,提问作者Ankita
相关产品推荐
相关产品推荐

