基于Google表单提交内容发送条件邮件的脚本求助
解决Google表单提交触发对应州邮件发送的问题
原代码的核心问题
- 函数定义嵌套在
if/else块中,不符合JavaScript语法规范,逻辑完全无法执行 lastRow变量未定义,getvalues()拼写错误(应为getValues(),Google Apps Script对大小写敏感)else后面不能直接跟条件判断,需用else if- 硬编码固定取
C2单元格,应该获取最新提交行的邮箱地址,而非固定单元格 - 触发创建代码放在全局作用域,会导致每次运行脚本都创建新触发,引发重复执行
正确实现代码
// 表单提交触发的处理函数,参数e为表单提交事件对象(自动传入) function onFormSubmit(e) { // 获取用户提交的所有数据,顺序与表单字段一致(第一个是时间戳) const formData = e.values; // 请根据你的实际表单字段顺序调整索引!索引从0开始 // 示例:假设第2个字段是州(NY/MA),第3个字段是邮箱 const userState = formData[1]; const userEmail = formData[2]; // 根据州设置邮件内容 let emailSubject, emailContent; if (userState === "NY") { emailSubject = "你的纽约州提醒邮件"; emailContent = "这是你的纽约州专属提醒内容!"; } else if (userState === "MA") { emailSubject = "你的马萨诸塞州提醒邮件"; emailContent = "这是你的马萨诸塞州专属提醒内容!"; } else { // 处理未知州的情况(可选) emailSubject = "未知州提醒"; emailContent = "无法识别你填写的州信息,请检查后重新提交。"; } // 确保邮箱地址有效时发送邮件 if (userEmail) { MailApp.sendEmail(userEmail, emailSubject, emailContent); } } // 运行此函数创建表单提交触发(只需执行一次) function createSubmitTrigger() { const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // 检查是否已有同名触发,避免重复创建 const existingTriggers = ScriptApp.getProjectTriggers(); const triggerExists = existingTriggers.some(t => t.getHandlerFunction() === "onFormSubmit"); if (!triggerExists) { ScriptApp.newTrigger("onFormSubmit") .forSpreadsheet(spreadsheet) .onFormSubmit() .create(); SpreadsheetApp.getUi().alert("表单提交触发已创建成功!"); } else { SpreadsheetApp.getUi().alert("触发已存在,无需重复创建!"); } }
关键说明
- 事件对象
e的使用:表单提交时,Google会自动传入事件对象,e.values包含了用户提交的所有数据,顺序和你在表单中设置的字段完全一致(第一个元素是提交时间戳)。你需要根据自己的表单字段顺序调整索引,比如如果州是表单的第3个字段,就用formData[2](索引从0开始)。 - 触发设置方式:
- 方法一:手动创建:打开脚本编辑器 → 点击「编辑」→「当前项目的触发器」→ 点击「添加触发器」,选择
onFormSubmit函数,事件类型选「表单提交」,保存即可。 - 方法二:运行一次
createSubmitTrigger函数,它会自动创建触发并避免重复。
- 方法一:手动创建:打开脚本编辑器 → 点击「编辑」→「当前项目的触发器」→ 点击「添加触发器」,选择
- 权限授权:第一次运行脚本时,会提示授权发送邮件的权限,按照页面指引完成授权即可。
- 测试验证:提交一次表单,检查对应邮箱是否收到匹配州的邮件,若未收到,检查字段索引是否正确、邮箱是否填写正确。
内容的提问来源于stack exchange,提问作者user19613981
相关产品推荐
相关产品推荐

