谷歌应用脚本 - 在Gmail中更改单个电子邮件的标签

3
我希望能够在Google脚本中以编程方式更改Gmail中单个电子邮件的标签。我无法使用标准GmailApp服务,因为它会将操作应用于整个邮件线程,而不是单个电子邮件。我已经找到了一些使用高级Gmail API进行此操作的示例(在特定消息中搜索/替换标签(而不是整个线程)与Google Apps Script)。但是我没有成功。我一直收到以下错误:

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

这里是我在Google Script Editor中尝试过的代码片段:
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]
    }
  })
}

谷歌的资源文档指出,在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个回答

1

这个修改怎么样?

修改点:

  • 请将Gmail.Users.Messages.modify()中的变量拼写进行修改。
    • messageId修改为msgId
    • addlabel修改为addLabel
    • removelabel修改为removeLabel
  • 您可以使用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);

注意:

  • 这个修改后的脚本假定 Gmail API 已经在高级 Google 服务和 API 控制台中启用。

参考:

如果我误解了您的问题,我很抱歉。


谢谢您的评论。您在我的伪代码中发现了一些错误,非常感谢!我意识到一直以来我的问题都是因为我使用了标签“名称”而不是标签“ID”。所以,我会接受您的答案,因为您发现了一些错误。 - Vanderling
2
为了供他人参考,这里是获取 Gmail 账户中所有标签列表的 gs 代码:function listLabels() { var labels = Gmail.Users.Labels.list('me'); Logger.log(labels); } - Vanderling
@Vanderling 谢谢您的回复并提供更多信息。我很高兴您的问题已经解决。 - Tanaike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接