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

使用Apps Script发送邮件时权限异常问题求助

Google Apps Script 发送邮件权限错误解决方法

问题背景

通过Google Form与Google Sheet收集数据,提交问卷后由触发器执行主函数,完成计算并生成PDF,最后调用发送邮件函数时出现权限错误。已启用Gmail API,且在appsscript.json中添加了相关oauthScopes,但问题未解决。

现有配置与代码

appsscript.json 配置

{
  "oauthScopes": [
    "https://www.googleapis.com/auth/gmail.send",
    "https://www.googleapis.com/auth/gmail.compose",
    "https://www.googleapis.com/auth/gmail.modify"
  ],
  "timeZone": "America/Toronto",
  "dependencies": {
    "enabledAdvancedServices": [
      {
        "userSymbol": "Gmail",
        "version": "v1",
        "serviceId": "gmail"
      }
    ]
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8"
}

发送邮件函数

function sendEmail(email, pdfFile){
  var subject = "Test";
  var message = "Hi";

  GmailApp.sendEmail(email, subject, message);
}

错误信息

Exception: The script does not have permission to perform that action. Required permissions: (https://www.googleapis.com/auth/gmail.send || https://www.googleapis.com/auth/gmail.compose || https://www.googleapis.com/auth/gmail.modify || https://mail.google.com/ || https://www.googleapis.com/auth/gmail.addons.current.action.compose)

解决步骤

  • 检查触发器运行身份
    进入脚本编辑器的「编辑」→「当前项目的触发器」,确认表单提交触发器的「运行身份」设置为脚本所有者(你的账号),而非「提交表单的用户」——普通提交用户没有发送邮件的权限,会导致触发时权限不足。

  • 补充权限范围
    在appsscript.json的oauthScopes中添加https://mail.google.com/权限,修改后的配置如下:

    "oauthScopes": [
      "https://www.googleapis.com/auth/gmail.send",
      "https://www.googleapis.com/auth/gmail.compose",
      "https://www.googleapis.com/auth/gmail.modify",
      "https://mail.google.com/"
    ]
    
  • 重新授权脚本
    修改配置后,手动运行一次主函数(不要通过触发器触发),按照提示完成重新授权流程,确保新的权限被系统认可。

  • 确认Gmail API启用状态
    进入脚本编辑器的「资源」→「云平台项目」,打开对应的GCP项目,搜索并确认Gmail API处于启用状态(部分情况下高级服务的启用可能存在同步延迟)。

  • 备选:切换至Gmail高级服务发送邮件
    如果上述方法无效,尝试使用Gmail高级服务的接口替代GmailApp.sendEmail,代码示例:

    function sendEmail(email, pdfFile){
      var subject = "Test";
      var message = "Hi";
      // 构造邮件原始内容并编码
      var raw = Utilities.base64EncodeWebSafe(
        "To: " + email + "\r\n" +
        "Subject: " + subject + "\r\n\r\n" +
        message
      );
      // 调用Gmail API发送邮件
      Gmail.Users.Messages.send({raw: raw}, "me");
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:46:06