【问题标题】:gmail api error in apps scripting + Insufficient permissions error code 403 domain global应用程序脚本中的 gmail api 错误 + 权限不足错误代码 403 域全局
【发布时间】:2017-10-15 22:15:06
【问题描述】:

我启用了 Gmail API,并在 stackoverflow 上查找了所有问题,以确保我没有遗漏任何内容。即使在符合 gmail API 的所有选项之后,我也会收到以下错误:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "insufficientPermissions",
    "message": "Insufficient Permission"
   }
  ],
  "code": 403,
  "message": "Insufficient Permission"
 }
}

我没有选择,想知道我哪里出错了。

    var body = "<html><body>"
      + "<p>" + "Hi Team," + "<br/><br/>"
      + "<p>" + "Can you please review the bid for the following opportunity:" + "<br/>" 
      + "<p>" + "<u><b>Opportunity Details: </b></u>"+ "<br/>"  
      + "</body></html>";

      Logger.log(body);  
      var con = ContactsApp.getContactsByGroup(ContactsApp.getContactGroup('Australia')); 
      var toList = [];
      for (var i in con) {
        toList[i] = "<" + con[i].getPrimaryEmail() + ">";  
      }  
      toList = toList.join(',');

      var msg = {
        to: toList,
        from: {
          name: ContactsApp.getContact(Session.getEffectiveUser().getEmail()).getFullName(),
          email: Session.getEffectiveUser().getEmail(),
          signature: Gmail.Users.Settings.SendAs.list("me").sendAs[0].signature
        },
        body: body,
        subject: sub
      };

      //  var htmlBody = '<p>Hello, I am an HTML message</p><br/>' + '<a href="---------------">Click here</a>';
      //  var signature = Gmail.Users.Settings.SendAs.list("me").sendAs[0].signature    ;    //sendAs.filter(function(account){if(account.isDefault){return true}})[0].signature;

      var raw = 'From: <' + msg.from.email + '>\r\n' +
        'To: ' + msg.to + '\r\n' +
          'Subject:' + msg.subject + '\r\n' +
            'Content-Type: text/html; charset=UTF-8\r\n' + 
              '\r\n' + msg.body + msg.from.signature;

      var draftBody = Utilities.base64Encode(raw, Utilities.Charset.UTF_8).replace(/\//g,'_').replace(/\+/g,'-');

      var params = {
        method      : "post",
        contentType : "application/json",
        headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
        devMode     : true,
        muteHttpExceptions:true,
        payload:JSON.stringify({
          "message": {
            "raw": draftBody
          }
        })
      };

      var resp = UrlFetchApp.fetch("https://www.googleapis.com/gmail/v1/users/me/drafts", params);
      Logger.log(resp);
      Logger.log(resp.getContentText());

【问题讨论】:

  • 你在哪里实例化ScriptApp?我怀疑您只要求https://www.googleapis.com/auth/gmail.labels 的范围,并且您至少需要https://www.googleapis.com/auth/gmail.send 才能发送消息。
  • 如何在应用脚本中添加额外的范围?我在高级谷歌服务中激活了 Gmail API,并为项目启用了 gmail api
  • 对不起,配置后应该是自动的吧,我的错。你有没有偶然发现this answer
  • 还没有。我被吹了。已尝试再次禁用和启用,但没有成功

标签: google-apps-script gmail-api


【解决方案1】:

我通过在 Google Scripts 界面中手动修改清单文件解决了这个问题。

如果您查看 文件 > 项目属性 > 范围,您会发现应用程序已经在请求授权的某些范围。您可以通过更改 json 清单文件手动添加到这些范围,在 View > Show manifest file 下添加项目属性中的那些 + Gmail API 所需的那个,在我的情况下,“@ 987654321@"。

希望对您有所帮助。

【讨论】:

  • "enabledAdvancedServices": [{ "userSymbol": "Gmail", "serviceId": "gmail", "version": "v1" }, { "userSymbol": "Slides", "serviceId ": "slides", "version": "v1" }, { "userSymbol": "Drive", "serviceId": "drive", "version": "v2" }, { "userSymbol": "Plus", “serviceId”:“plus”,“version”:“v1”},{“userSymbol”:“Sheets”,“serviceId”:“sheets”,“version”:“v4”}],
  • 这是我在清单文件中看到的...我在清单文件的哪个位置添加了这个范围?
猜你喜欢
  • 1970-01-01
  • 2018-10-31
  • 2021-01-18
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2015-10-27
相关资源
最近更新 更多