请求协助设置邮件触发:特定用户提交表单时自动发邮件


解决Google表格表单提交触发特定用户邮件通知的方案 #我之前处理过几乎一模一样的需求,踩过不少坑,给你一套能解决问题的实操方案:

先排查之前触发器无效的核心原因 #你之前用On change、On Edit、On form submit没效果,大概率是这两个问题:

触发器绑定错了工作表:On form submit必须绑定到接收表单提交数据的那张原始工作表,而不是你提取特定用户数据的工作表,否则监听不到表单提交事件没有做重复发送的防重逻辑,导致测试时出现重复邮件,误以为触发器失效具体实现步骤 #1. 编写Google Apps Script核心代码 #打开你的Google表格,点击「扩展程序」→「Apps脚本」,创建新脚本,替换成以下代码(根据你的实际表格结构调整参数):

function sendTargetUserEmail(e) {

// 获取表单提交的行对象

const submittedRow = e.range;

const sourceSheet = submittedRow.getSheet();

const rowIndex = submittedRow.getRow();

// 1. 配置关键参数(根据你的表格修改!)

const targetUsers = ['user1@yourdomain.com', 'user2@yourdomain.com']; // 目标用户邮箱

const submitterEmailCol = 2; // 表单中收集用户邮箱的列索引(比如第2列)

const emailStatusCol = 6; // 用来标记是否已发邮件的列(提前在表格里加一列,比如叫「邮件状态」)

// 2. 提取提交用户信息并校验

const submitterEmail = sourceSheet.getRange(rowIndex, submitterEmailCol).getValue();

const hasSentEmail = sourceSheet.getRange(rowIndex, emailStatusCol).getValue() === '已发送';

// 3. 仅当是目标用户且未发送过邮件时执行

if (targetUsers.includes(submitterEmail) && !hasSentEmail) {

// 构造邮件内容(根据你的表单字段调整)

const emailSubject = `[通知] 目标用户${submitterEmail}提交了表单`;

const emailBody = `

用户邮箱:${submitterEmail}

提交时间:${new Date().toLocaleString()}

表单内容:

- 问题1:${sourceSheet.getRange(rowIndex, 3).getValue()}

- 问题2:${sourceSheet.getRange(rowIndex, 4).getValue()}

`;

// 发送邮件(替换成你的收件人邮箱)

MailApp.sendEmail('your-admin@yourdomain.com', emailSubject, emailBody);

// 标记已发送,防止重复触发

sourceSheet.getRange(rowIndex, emailStatusCol).setValue('已发送');

}

}

2. 正确配置触发器 #这一步是关键,别再绑错工作表了:

在Apps脚本页面,点击左侧的「触发器」图标(时钟形状)点击「添加触发器」,按以下配置:

选择要运行的函数:sendTargetUserEmail选择部署类型:Head deployments(如果是新创建的脚本,默认选这个)选择事件源:从电子表格选择事件类型:On form submit点击「保存」,按照提示完成权限授权(需要允许脚本访问你的邮箱和表格)3. 测试验证 #用目标用户的账号提交一次表单,检查:

收件邮箱是否收到通知邮件原始表单工作表的「邮件状态」列是否被标记为「已发送」再次提交同一份表单(如果允许重复提交),不会重复发送邮件额外注意事项 #如果你的表单没有收集用户邮箱,可以用Session.getActiveUser().getEmail()来获取提交者的邮箱,但这个要求用户必须登录Google账号提交表单,且脚本需要额外的权限确保「邮件状态」列是提前在原始表单工作表中添加的,不要放到提取数据的工作表里如果遇到权限问题,在脚本编辑器中点击「运行」→「运行函数」→sendTargetUserEmail,手动触发一次授权流程内容的提问来源于stack exchange,提问作者Juan Pablo Marroquin

DEEP ORACLE
行情落地续飞,机器人为什么停不下来?