You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于邮箱域名的Google Apps Script条件邮件回复脚本编写

如何在Google Apps Script中根据邮箱域名分支发送不同邮件

我来帮你搞定这个if/else分支逻辑,其实核心步骤就是获取用户提交的邮箱地址→检查域名是否在禁用列表→根据结果调用不同的邮件发送函数。下面是具体的修改方案:

第一步:准备工作

首先,你需要:

  • 确认电子表格中存储用户邮箱的列名(比如叫「邮箱」,请替换成你实际的表头名称)
  • 整理好需要禁用的域名列表

第二步:修改后的完整代码

我重构了你的原有代码,添加了分支判断逻辑,同时保留了所有原有功能:

// 全局配置:根据你的实际情况修改
var formID = 'FormID';
var sheetName = 'Form Responses';
var columnNameEditUrl = 'Edit Url';
var columnNameEmail = '邮箱'; // 替换成你表单里的邮箱列表头
var startRow = 2;
const blockedDomains = ['domain1.com', 'domain2.com']; // 禁用域名列表,可按需添加

// 主函数:表单提交后触发,先更新编辑链接,再判断发送邮件
function expCalc(){ 
  // 先确保编辑链接已写入表格,同时获取最新的编辑链接
  const editUrl = getEditResponseUrls();
  // 获取最新提交的用户邮箱地址
  const userEmail = getUserEmail();
  
  // 核心分支判断逻辑
  if (isBlockedDomain(userEmail)) {
    // 禁用域名:发送引导修改邮箱的邮件(带编辑链接)
    ReplyEmail1(userEmail, editUrl);
  } else {
    // 正常域名:发送带PDF附件的邮件
    ReplyEmail2(userEmail);
  }
}

// 获取最新提交的用户邮箱地址
function getUserEmail() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  var emailColumnIndex = headers.indexOf(columnNameEmail);
  // 读取表格最后一行(最新表单提交)的邮箱值
  return sheet.getRange(sheet.getLastRow(), emailColumnIndex + 1).getValue();
}

// 检查邮箱是否属于禁用域名
function isBlockedDomain(email) {
  if (!email) return false; // 空邮箱直接跳过判断
  const domain = email.split('@')[1]?.toLowerCase(); // 提取@后的域名并转小写,避免大小写判断误差
  return blockedDomains.includes(domain);
}

// 原有功能:更新编辑链接,返回最新的编辑链接(优化为只处理最新一行,提升性能)
function getEditResponseUrls(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  var columnIndex = headers.indexOf(columnNameEditUrl);
  var lastRow = sheet.getLastRow();
  var data = sheet.getRange(lastRow, 1, 1, sheet.getLastColumn()).getValues()[0];
  
  var editResponseUrl = '';
  if(data[0] != '' && data[columnIndex] == '') {
    var timestamp = data[0];
    var form = FormApp.openById(formID);
    var formSubmitted = form.getResponses(timestamp);
    if(formSubmitted.length > 0) {
      editResponseUrl = formSubmitted[0].getEditResponseUrl();
      sheet.getRange(lastRow, columnIndex + 1).setValue(editResponseUrl);
    }
  } else {
    // 如果已经存在编辑链接,直接读取返回
    editResponseUrl = data[columnIndex];
  }
  return editResponseUrl;
}

// 发送引导修改邮箱的邮件(带编辑链接)
function ReplyEmail1(toEmail, editUrl) {
  const subject = "请修改您的表单邮箱地址";
  const htmlBody = `
    <p>您好,您提交的邮箱域名不符合要求,请点击下方链接修改表单邮箱:</p>
    <p><a href="${editUrl}">修改我的表单提交</a></p>
  `;
  MailApp.sendEmail({
    to: toEmail,
    subject: subject,
    htmlBody: htmlBody
  });
}

// 发送带PDF附件的邮件(原有功能,调整为动态接收用户邮箱)
var htmlBody = HtmlService.createHtmlOutputFromFile('mail_template').getContent();
var file1 = DriveApp.getFileById('File id1');
var file2 = DriveApp.getFileById('File id2');
function ReplyEmail2(toEmail) {
  MailApp.sendEmail({
    to: toEmail,
    subject: "提交成功",
    htmlBody: htmlBody,
    attachments: [file1.getAs(MimeType.PDF), file2.getAs(MimeType.PDF)]
  });
}

关键逻辑说明

  1. 获取用户邮箱:getUserEmail函数通过表头匹配找到邮箱列,直接读取表格最后一行的邮箱值(表单提交后最新数据默认在最后一行)。
  2. 域名判断:isBlockedDomain函数拆分邮箱地址提取域名,转小写后检查是否在禁用列表中,避免大小写导致的判断误差。
  3. 分支执行:主函数expCalc先确保编辑链接已生成,再根据域名判断结果调用对应的邮件函数,逻辑清晰。
  4. 邮件函数优化:把两个邮件函数改成接收动态参数(用户邮箱、编辑链接),避免硬编码收件人,适配不同场景。

注意事项

  • 请务必把columnNameEmail替换成你电子表格中实际的邮箱列表头。
  • 如果需要新增禁用域名,直接在blockedDomains数组里添加即可。
  • 如果你的表单是通过「提交时触发函数」运行,记得把触发器绑定到expCalc上。

内容的提问来源于stack exchange,提问作者BMulf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:33:39