Google Apps脚本-更改Gmail中单个电子邮件的标签

时间:2018-09-11 07:38:37

标签: google-apps-script gmail gmail-api

我想以编程方式在Google脚本中的gmail中更改单个电子邮件的标签。我无法使用标准的GmailApp service,因为它会将操作应用于整个线程,而不是单个电子邮件。我已经找到了一些使用高级Gmail API(Search/replace labels in specific messages (not the whole thread) with Google Apps Script)完成此操作的示例。但是我还没有成功。我不断收到以下错误:

  

提供的参数数量无效。仅预期3-4(第5行,文件   “测试”)

以下是我在Google脚本编辑器中尝试过的代码段:

function changeLabel() {
  var addLabel = '3to-smartsheetstest';
  var removeLabel = '3to-smartsheets';
  var msgId = '142b7c52e4cc4619';
  var msgLabel = Gmail.Users.Messages.modify({
    'userId': 'me',
    'id': messageId,
    'resource':{
      'addLabelIds': [addlabel],
      'removeLabelIds': [removelabel]
    }
  })
}

Google's resource documentation表示要针对javascript构建这样的参数:

'userId': userId,
'id': messageId,
'addLabelIds': labelsToAdd,
'removeLabelIds': labelsToRemove

但是似乎实际上需要采用这种结构(在此处的错误报告中进行了澄清:https://github.com/google/google-api-nodejs-client/issues/312):

'userId': 'some email address',
'id': 'some message id',
'resource':{
    'addLabelIds': ['some label id'],
    'removeLabelIds': []
}

无论哪种方式,我都会遇到相同的错误。

1 个答案:

答案 0 :(得分:0)

此修改如何?

修改点:

  • 请修改Gmail.Users.Messages.modify()的变量拼写。
    • messageId修改为msgId
    • addlabel修改为addLabel
    • removelabel修改为removeLabel
  • 您可以像Gmail.Users.Messages.modify()一样使用Gmail.Users.Messages.modify(resource, userId, id)。您可以通过脚本编辑器的自动完成功能看到它。

修改后的脚本:

从:
var msgLabel = Gmail.Users.Messages.modify({
  'userId': 'me',
  'id': messageId,
  'resource':{
    'addLabelIds': [addlabel],
    'removeLabelIds': [removelabel]
  }
})
至:
var msgLabel = Gmail.Users.Messages.modify({
  'addLabelIds': [addLabel],
  'removeLabelIds': [removeLabel]
}, 'me', msgId);

注意:

  • 此修改后的脚本假定在高级Google服务和API控制台上启用了Gmail API。

参考:

如果我误解了你的问题,对不起。