如何通过脚本在Google表单提交触发的邮件主题追加用户账号
解决表单提交邮件主题追加账号信息的TypeError问题
问题分析
你遇到的TypeError大概率是因为直接访问第三个问题的响应时未做边界判断,或是修改函数参数时传递逻辑出错。比如表单提交的响应数不足3个时,访问itemResponses[2]会触发数组越界错误;或是修改sendEmail函数后未同步调整参数传递逻辑。
修改方案
以下是调整后的完整代码,核心改动是安全获取账号响应并动态拼接邮件主题:
// Restrict the script's authorization // to the form it is bound to. //@OnlyCurrentDoc // Create a form submit installable trigger // using Apps Script. 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 Service Input:\n\n"; itemResponses.forEach(function(itemResponse) { var title = itemResponse.getItem().getTitle(); var response = itemResponse.getResponse(); emailBody += title + "\n" + response + "\n\n"; }); // 安全获取第三个问题(账号)的响应,索引从0开始,第三个对应索引2 var accountResponse = ""; if (itemResponses.length > 2) { accountResponse = itemResponses[2].getResponse(); } // 传递账号信息到邮件发送函数 sendEmail(emailBody, accountResponse); } // 邮件发送函数,新增账号参数 function sendEmail(emailBody, accountResponse) { var subject = "New Service Input"; // 如果有有效账号信息,追加到主题末尾 if (accountResponse && accountResponse.trim() !== "") { subject += " - 账号: " + accountResponse; } MailApp.sendEmail("test@email.com", subject, emailBody); }
关键改动说明
- 边界判断:先检查
itemResponses长度是否大于2,避免因响应数不足导致的数组越界错误 - 参数扩展:给
sendEmail新增accountResponse参数,同步在onFormSubmit中传递该值 - 空值处理:仅当账号响应不为空时才追加到主题,避免主题出现无效空内容
内容的提问来源于stack exchange,提问作者612Tech
相关产品推荐
相关产品推荐

