如何使用服务帐户使用Gmail API为主Gusite帐户创建签名

人气:313 发布:2022-10-16 标签: gmail-api google-apps-script

问题描述

我正在使用POSThttps://www.googleapis.com/gmail/v1/users/userId/settings/sendAs,并且能够在GSuite帐户中添加带有签名的别名ID,但是我正在尝试使用相同的代码更新主要GSuite帐户的签名,但它没有更新。

请指导如何应用逻辑来使用服务帐户更新主GSuite帐户签名

https://developers.google.com/gmail/api/v1/reference/users/settings/sendAs

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
var service_account = {
    "private_key":"-----BEGIN PRIVATE KEY-----VE=
-----END PRIVATE KEY-----
",
    "client_email":"xxxxxx",
    "client_id": "xxxxxxx",
  "userEmail" = 'admin@demo.in';

};

 

function getOAuthService(user) {
    return OAuth2.createService("Service Account")
         .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
        .setTokenUrl('https://accounts.google.com/o/oauth2/token')
        .setPrivateKey(service_account.private_key)
        .setIssuer(service_account.client_email)
        .setSubject(userEmail)
        .setPropertyStore(PropertiesService.getScriptProperties())
        .setParam('access_type', 'offline')
         .setParam('approval_prompt', 'force')
        .setScope('https://www.googleapis.com/auth/gmail.settings.sharing https://www.googleapis.com/auth/gmail.settings.basic');
}



function createAlias() {
  var userEmail = 'admin@demo.in';
  //var alias = 'Testing@demo.in';
  //var alias_name = ' User';
  var signature = 'Testing';

  
  var service = getOAuthService();
  service.reset();
  if (service.hasAccess()) {
    var url = 'https://www.googleapis.com/gmail/v1/users/me/settings/sendAs'

    var headers ={
      "Authorization": 'Bearer ' + service.getAccessToken(),
      "Accept":"application/json", 
      "Content-Type":"application/json",
      };

    var resource ={
     sendAsEmail: alias,
     signature: signature,
     replyToAddress : alias,
     treatAsAlias: true,
     verificationStatus: 'accepted',
     isPrimary:true,
      isDefault:true

      };
    

    
    var options = {
      'headers': headers,
      'method': 'POST',
      'payload':JSON.stringify(resource),
      'muteHttpExceptions': true
      };

    Logger.log(options);
    var response = UrlFetchApp.fetch(url, options);
    Logger.log(response.getContentText());
    }
}

function reset() {
    var service = getOAuthService();
    service.reset();
}

推荐答案

您需要使用Users.settings.sendAs: patch

在Apps脚本中,您可以这样做:
function changeSignature() {
  var userId = 'your primary email';
  var sendAsEmail = userId;
  var signature = 'Testing'; 
  var service = getService();
  service.reset();
  if (service.hasAccess()) {    
    var url = 'https://www.googleapis.com/gmail/v1/users/'+userId+'/settings/sendAs/'+sendAsEmail   
    var headers ={
      "Authorization": 'Bearer ' + service.getAccessToken(),
      "Accept":"application/json", 
      "Content-Type":"application/json",
    };   
    var resource ={
      "signature": signature,
    };    
    var options = {
      'headers': headers,
      'method': 'PATCH',
      'payload':JSON.stringify(resource),
      'muteHttpExceptions': true
    };
    var response = UrlFetchApp.fetch(url, options);
    Logger.log(response.getContentText());    
  } 
}
您似乎已经做对了,但我要指出的是:

构建服务帐户时,指定作用域https://www.googleapis.com/auth/gmail.settings.basic'并包括.setSubject(userEmail)

非常重要

403