2017-04-13 67 views
0

我創建了下面的代碼,它提供了一些幫助來訪問我的域上的任何用戶簽名,以便在用戶之間實現標準化。目前,當我在URLFetch參數中指定方法'PATCH'時,我得到的只是我發送的電子郵件的sendAs資源,包括舊簽名。如果我指定了PUT方法,它將刪除簽名,但不會將我指定的簽名設置到該帳戶上。有人能幫我看看我做錯了什麼嗎?REST請求,通過域驗證更新GMAIL簽名

////////////////////////////////////////////////////FUNCTION SET SIGNATURE//////////////////////////////////////////////////////////////////////// 
 

 
/** 
 
* Authorizes and makes a request to the GMail API. 
 
*/ 
 
function setSignature(user) 
 
{ 
 
    var user = '[email protected]'; 
 
    var newSig = '<b>This is my new Signature!</b>'; 
 
    var service = getService(user); 
 
    if (service.hasAccess()) { 
 
    var url = 'https://www.googleapis.com/gmail/v1/users/'+user+'/settings/sendAs/'+user; 
 
     
 
     var payload = 
 
     { 
 
     "sendAsEmail" : user, 
 
     "displayName" : AdminDirectory.Users.get(user).name.fullName, 
 
     "type" : "patch", 
 
     "replyToAddress" : user, 
 
     "signature": newSig 
 
     }; 
 
    
 
    var options = 
 
     { 
 
     "method" : "PUT", 
 
     "payload" : payload, 
 
     "muteHttpExceptions": true, 
 
     "contentType": "ctAPPLICATION_JSON", 
 
     "headers": {Authorization: 'Bearer ' + service.getAccessToken()} 
 
     }; 
 
     
 
    var response = UrlFetchApp.fetch(url, options); 
 
    Logger.log(response.getContentText()); 
 
    } else { 
 
    Logger.log(service.getLastError()); 
 
    } 
 
} 
 
////////////////////////////////////////////////////FUNCTION VIEW SIGNATURE//////////////////////////////////////////////////////////////////////// 
 
function viewSignature(user) { var user = USER_EMAIL; 
 
    var service = getService(user); 
 
    Logger.log(service.hasAccess()); 
 
    if (service.hasAccess()) { 
 
    var url = 'https://www.googleapis.com/gmail/v1/users/'+user+'/settings/sendAs'; 
 
    var response = UrlFetchApp.fetch(url, { 
 
     headers: { 
 
     Authorization: 'Bearer ' + service.getAccessToken() 
 
     } 
 
    }); 
 
    var result = JSON.parse(response.getContentText()); 
 
    Logger.log(JSON.stringify(result, null, 2)); 
 
    } else { 
 
    Logger.log(service.getLastError()); 
 
    } 
 
} 
 
////////////////////////////////////////////////////FUNCTION RESET////////////////////////////////////////////////////////////////////////////////////// 
 
/** 
 
* Reset the authorization state, so that it can be re-tested. 
 
*/ 
 
function reset() { 
 
    var service = getService(); 
 
    service.reset(); 
 
} 
 
///////////////////////////////////////////////////////////FUNCTION GET SERVICE//////////////////////////////////////////////////////////////////////// 
 

 
/** 
 
* Configures the service. 
 
*/ 
 
function getService(user) { 
 
    return OAuth2.createService('Gmail:' + user) 
 
     // Set the endpoint URL. 
 
     .setTokenUrl('https://accounts.google.com/o/oauth2/token') 
 

 
     // Set the private key and issuer. 
 
     .setPrivateKey(PRIVATE_KEY) 
 
     .setIssuer(CLIENT_EMAIL) 
 

 
     // Set the name of the user to impersonate. This will only work for 
 
     // Google Apps for Work/EDU accounts whose admin has setup domain-wide 
 
     // delegation: 
 
     // https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority 
 
     .setSubject(user) 
 

 
     // Set the property store where authorized tokens should be persisted. 
 
     .setPropertyStore(PropertiesService.getScriptProperties()) 
 

 
     // Set the scope. This must match one of the scopes configured during the 
 
     // setup of domain-wide delegation. 
 
     .setScope('https://www.googleapis.com/auth/gmail.settings.basic', 'https://www.googleapis.com/auth/gmail.settings.sharing'); 
 
} 
 
////////////////////////////////////////////////////FUNCTION CLEAR SIGNATURE//////////////////////////////////////////////////////////////////////// 
 
function clearService(){ 
 
    OAuth2.createService('drive') 
 
    .setPropertyStore(PropertiesService.getUserProperties()) 
 
.reset(); 
 
}

注:OAuth2用戶憑據都存儲在一個單獨的文件中恆變量,但我已驗證憑據返回的有效數據。

謝謝,

+0

有趣的是,先進的服務谷歌腳本補丁功能的工作原理與上面提到的有效載荷。我知道你可能無法使用高級服務,這僅僅是供參考。希望其他人能弄清楚這一點! –

回答

0

我的應用程序的作品,問題是contentType。

嘗試:

var formData = {'sendAsEmail':user,'type':'patch','signature': newSig} 
    var options = 
     { 
     'method' : 'put', 
     'muteHttpExceptions': true, 
     'contentType': 'application/json', 
     'headers': {Authorization: 'Bearer ' + service.getAccessToken()}, 
     'payload': JSON.stringify(formData) 
     };