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

如何通过Google Apps Script在邮件中添加按钮并将响应回传到Google Sheet

问题原因说明

所有主流邮件客户端都默认禁用HTML邮件内嵌的JavaScript代码,你给按钮绑定的onclick事件根本不会被执行,这是邮件客户端的通用安全限制,无法绕过。

可落地解决方案

你可以通过「Web App + 带参数的链接按钮」实现需求,具体步骤如下:

步骤1:新增Web App入口函数、修改写入逻辑

在你的.gs文件中新增doGet函数(Web App的固定入口),同时修改原来的响应写入逻辑,支持通过唯一ID定位要写入的行:

// Web App入口,接收用户点击按钮的请求
function doGet(e) {
  // 从URL参数中提取用户选择的结果、对应记录的唯一ID
  const userResponse = e.parameter.response === 'true';
  const recordId = e.parameter.recordId;
  // 写入表格
  writeResponseToSheet(userResponse, recordId);
  // 给用户返回提交成功的反馈页
  return HtmlService.createHtmlOutput('<h3>提交成功,感谢你的反馈!</h3>');
}

// 替换原来的myFunction,支持根据recordId定位写入位置
function writeResponseToSheet(response, recordId) {
  const ss = SpreadsheetApp.openById("替换为你的表格ID");
  const trackingSheet = ss.getSheetByName('Tracking');
  // 示例:你可以提前把每个提交记录的唯一ID存在A列,此处根据recordId匹配对应行
  // const targetRow = trackingSheet.getRange("A:A").getValues().findIndex(row => row[0] == recordId) + 1;
  // 如果暂时不需要匹配,也可以保留你原来的固定单元格逻辑
  const targetCell = trackingSheet.getRange("I12"); 
  targetCell.setValue(response ? "Yes!" : "No");
}

步骤2:部署Web App获取访问地址

  • 打开Apps Script项目,点击右上角「部署」->「新建部署」
  • 点击设置图标选择「Web应用」
  • 「执行身份」选择「我(你的账号邮箱)」
  • 「有权访问的人」选择「任何人,甚至匿名用户」
  • 点击部署,完成权限授权后复制生成的Web App访问地址,格式类似https://script.google.com/macros/s/xxxx/exec

步骤3:修改邮件模板,把按钮替换为带参数的链接

修改checkIN.html,把原生button换成样式模拟成按钮的超链接,点击后直接跳转到Web App地址并携带参数:

<!DOCTYPE html>
<html>
<head>
    <base target="_top">
    <style>
        .btn {
            color: white;
            width: 250px;
            padding: 15px 32px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            border-radius: 4px;
        }
        .btn-yes {
            background-color: #4CAF50;
        }
        .btn-no {
            background-color: #f44336;
        }
    </style>
</head>
<body>
    <p style="font-size:150%;">Good afternoon,<br><br>
    Yesterday you assigned <?= info.name ?> to academic recovery for <?= info.subject?>.<br>
    Did the student complete the assignment?</p>
    <!-- 替换href里的Web App地址为你自己部署的地址 -->
    <a href="https://script.google.com/macros/s/你的WebAppID/exec?response=true&recordId=<?= info.recordId ?>" class="btn btn-yes"> 是 </a>
    <a href="https://script.google.com/macros/s/你的WebAppID/exec?response=false&recordId=<?= info.recordId ?>" class="btn btn-no"> 否 </a>
</body>
</html>

步骤4:修改发件逻辑,携带记录ID

发邮件时给info对象加上recordId字段,用来定位对应用户的提交记录:

function emailTest() {
  var infoDict =
  {
    name: "Teacher",
    subject: "Computer Science",
    recordId: "123" // 替换为对应记录的唯一ID,可以是表单提交时间戳、自增ID等
  };
  sendEmail(infoDict);
}

注意事项

  • 修改Web App代码后需要重新部署新版本,否则修改不会生效
  • 如果需要防止恶意提交,可以给参数加简单的签名校验,普通场景不需要额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:18:02