如何让Google表单仅对新提交发自动邮件并自定义发件人?
问题解决方案
一、让脚本仅在新表单提交时执行
要避免编辑响应时触发邮件,核心是判断当前触发事件对应的是新提交的响应还是编辑后的响应。最直接的方式是检查触发行是否为表格的最后一行——新提交的响应会添加到表格末尾,而编辑响应只会修改已有行。
修改后的脚本如下:
function sendFormEmails(e) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 判断当前触发的行是否是表格的最后一行(新提交) if (e.range.getRow() !== sheet.getLastRow()) { return; // 不是新提交,直接退出函数 } var emailAddress = e.values[4]; var subject = "自定义邮件主题"; var message = "<p>这是自定义的HTML邮件内容</p>"; var fromAddress = "fromemail@emaildomain.com"; var ccAddress = "ccemail@emaildomain.com"; MailApp.sendEmail(emailAddress, subject, message, { htmlBody: message, from: fromAddress, cc: ccAddress }); }
补充说明:如果表单响应表格存在手动添加的行,上述方法可能失效。此时可改用对比响应的创建时间与表格行的时间戳单元格值:通过e.response.getTimestamp()获取提交时间,若与表格中对应行的时间戳一致,则为新提交,否则为编辑后的响应。
二、自定义发件人地址的实现限制
Google Apps Script的MailApp.sendEmail方法对自定义发件人有严格限制:
- 个人谷歌账号:仅能使用脚本绑定的谷歌账号本身,或该账号已添加的邮箱别名作为发件人,无法设置完全无关的第三方邮箱地址。
- 谷歌工作区(Google Workspace)账号:管理员可在后台配置允许的发件人地址范围,此时可使用同一域名下的其他邮箱作为发件人,前提是管理员已开启相关权限。
内容的提问来源于stack exchange,提问作者Josh Kumin
相关产品推荐
相关产品推荐

