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

如何修改Google Apps Script实现表单提交者Gmail创建邮件草稿?

问题分析

你的脚本当前使用Google Forms的onFormSubmit触发器,这个触发器以表单所有者的账户权限在服务器端运行,所以调用GmailApp.createDraft时,操作的始终是你的Gmail账户,而非提交表单的用户账户。要实现草稿创建在用户自己的邮箱,必须让脚本获得用户的OAuth授权,在用户的上下文环境中执行。

解决方案

我们需要调整流程,让提交表单的用户主动触发授权流程,在自己的账户下运行脚本。具体步骤如下:

1. 配置OAuth权限范围

打开脚本编辑器的appsscript.json文件(如果没显示,点击「查看」→「显示清单文件」),添加必要的权限:

{
  "oauthScopes": [
    "https://www.googleapis.com/auth/gmail.compose",
    "https://www.googleapis.com/auth/drive.readonly",
    "https://www.googleapis.com/auth/forms.currentonly"
  ]
}

2. 修改脚本代码

更新脚本,添加Web App入口函数,让用户可以通过链接触发草稿创建逻辑:

// Web App入口,处理用户的GET请求
function doGet(e) {
  // 从URL参数中获取表单提交的内容
  var headerContent = e.parameter.header;
  var replyToEmail = e.parameter.replyTo;

  // 参数校验
  if (!headerContent || !replyToEmail) {
    return ContentService.createTextOutput("错误:缺少必要的参数");
  }

  try {
    // 创建草稿
    createDraft(headerContent, replyToEmail);
    return ContentService.createTextOutput("成功!邮件草稿已创建在你的Gmail账户中");
  } catch (err) {
    return ContentService.createTextOutput("创建失败:" + err.message);
  }
}

// 保留原有的草稿创建逻辑
function createDraft(headerContent, replyToEmail) {
  var officeEmailTemplate = getHTMLFromDrive();
  officeEmailTemplate = officeEmailTemplate.replace('$$$BODY_REPLACE', "<enter message body here>");
  officeEmailTemplate = officeEmailTemplate.replace('$$$TITLE_REPLACE', headerContent); 
  
  GmailApp.createDraft('', '', '', {
    htmlBody: officeEmailTemplate,
    replyTo: replyToEmail
  });
}

// 保留原有的模板读取逻辑
function getHTMLFromDrive() {
  var fileId = 'my-google-drive-template-ID'; // 替换为你的模板文件ID
  var file = DriveApp.getFileById(fileId);
  var htmlContent = file.getBlob().getDataAsString();
  return htmlContent;
}

// 表单提交后,给用户发送包含创建链接的邮件
function onFormSubmit(e) {
  var formResponses = e.response.getItemResponses();
  
  var headerContent = '';
  var replyToEmail = '';

  for (var i = 0; i < formResponses.length; i++) {
    var itemResponse = formResponses[i];
    var questionTitle = itemResponse.getItem().getTitle();

    if (questionTitle === 'Header content') {
      headerContent = encodeURIComponent(itemResponse.getResponse());
    } else if (questionTitle === 'Reply to email address') {
      replyToEmail = encodeURIComponent(itemResponse.getResponse());
    }
  }

  // 替换为你的Web App部署地址
  var webAppUrl = "https://script.google.com/macros/s/你的Web App ID/exec?header=" + headerContent + "&replyTo=" + replyToEmail;
  
  // 给提交表单的用户发送邮件,引导创建草稿
  GmailApp.sendEmail(
    e.response.getRespondentEmail(),
    "请创建你的邮件草稿",
    "点击下方链接完成授权并创建草稿:\n" + webAppUrl
  );
}

3. 部署为Web App

  1. 在脚本编辑器中,点击「部署」→「新部署」。
  2. 类型选择「Web应用」。
  3. 执行方式选择「以访问该Web应用的用户身份执行」(这是核心,确保脚本用用户的权限运行)。
  4. 访问权限选择「任何人,甚至匿名」(如果是域内使用,可选择「组织内任何人」)。
  5. 点击部署,复制生成的Web App URL,替换到onFormSubmit函数中的webAppUrl变量。

4. 调整模板文件权限

确保你的HTML模板文件在Google Drive中的权限设置为**「任何人可查看」**,否则用户无法读取模板内容。

5. 测试流程

用户提交表单后,会收到一封包含链接的邮件,点击链接后会跳转到授权页面,授权完成后脚本会在用户的账户下创建邮件草稿,最终草稿会出现在用户自己的Gmail草稿箱中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:45:19