基于Google Form多选的多条件邮件发送脚本改造需求
改造方案:支持复选框多选的邮件发送脚本
核心思路是用选项-配置映射表替代原有的switch语句,直接遍历用户选中的每个选项,匹配对应的收件邮箱和自定义主题,逐个发送邮件,完全不用枚举所有可能的多选组合。
改造后的完整代码:
function sendFormByEmail(e) { var named_values = e.namedValues; // 构建选项与邮箱、主题的映射表,直接对应表单里的选项文本 const outletConfig = { "School Intercom Announcement": { email: "person1@school.net", subject: "Announcement Request" }, "MHHS Website": { email: "person2@school.net", subject: "Announcement Request" }, "MHHS Social Media (Instagram, Facebook, Twitter)": { email: "person3@school.net", subject: "Announcement Request" }, "Week in Pics": { email: "person4@school.net", subject: "Week in Pics Request" }, "Remind text message (goes to students - please specify in your message info if it is all grades or specific grades)": { email: "person5@school.net", subject: "Remind Text Request" }, "Phone call home": { email: "person6@school.net", subject: "Announcement Request" } }; // 生成邮件内容 var message = ""; for (var field in named_values) { message += field + ' :: ' + named_values[field].toString() + "\n\n"; } // 获取用户选中的所有选项(数组形式) const selectedOutlets = named_values["Choose announcement outlet"]; // 遍历每个选中的选项,单独发送邮件 if (selectedOutlets && selectedOutlets.length > 0) { selectedOutlets.forEach(outlet => { const config = outletConfig[outlet]; if (config) { // 确保选项在映射表中有对应配置 MailApp.sendEmail(config.email, config.subject, message); } }); } }
关键改动说明
- 用映射表替代switch:把每个选项对应的邮箱和主题统一存在
outletConfig对象里,维护起来比switch更直观,新增选项直接加键值对就行。 - 处理多选数组:不再把选项转成逗号分隔的字符串,直接获取表单返回的数组
selectedOutlets,遍历每个元素。 - 逐个发送邮件:每选中一个选项,就给对应收件人发一封邮件,完全覆盖多选场景。
- 容错处理:增加了选中选项的空值检查,以及选项是否在映射表中的判断,避免触发无收件人错误。
- 统一默认主题:给所有无特殊主题的选项设置了默认主题
Announcement Request,避免原脚本中subject未定义的问题。
内容的提问来源于stack exchange,提问作者Jenny Tipton
相关产品推荐
相关产品推荐

