我有以下代码来使用使用HTTP描述的这里方法删除一些草稿:
function cleanUp2() {
var threads = GmailApp.search("in:trash is:draft");
Logger.log(threads.length);
var userId = 'xxxx@gmail.com';
var options = {
'method' : 'delete',
'muteHttpExceptions': true
};
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
Logger.log(messages.length);
for (var j = 0; j < messages.length; j++){
if (messages[j].isDraft()){
Logger.log('id msg: ' + messages[j].getId());
var url = 'https://www.googleapis.com/gmail/v1/users/' + userId + '/messages/' + messages[j].getId();
var response = UrlFetchApp.fetch(url,options);
Logger.log(response);
}
}
}
}但是,获取的响应如下:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "Login Required",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Login Required"
}
}因此,我的问题是如何登录Gmail以使HTTP请求正常工作?
发布于 2017-03-28 20:56:11
您需要在请求中发送授权头,如下所示:
//Code above this remains the same
var userId = 'kurokirasama@gmail.com';
var options = {
'headers':{'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()},
'method' : 'DELETE',
'muteHttpExceptions': true
};
//the code below remains the same注ScriptApp.getOAuthToken()在这里工作,因为您的脚本进行了GmailApp调用,因此您的脚本具有访问GmailApp API的令牌。如果没有在脚本中调用GmailApp,令牌将没有访问Gmail的范围。
或者,您可以在APi中使用高级服务;Resoruces>Advance services > Gmail APi (on),并使用以下代码实现相同的结果:
function cleanUp2() {
var threads = GmailApp.search("in:trash is:draft");
Logger.log(threads.length);
var userId = 'kurokirasama@gmail.com';
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
Logger.log(messages.length);
for (var j = 0; j < messages.length; j++){
if (messages[j].isDraft()){
Logger.log('id msg: ' + messages[j].getId());
Gmail.Users.Messages.trash(userId, messages[j].getId())
Logger.log(response);
}
}
}
}希望这能有所帮助!
https://stackoverflow.com/questions/43073380
复制相似问题