【问题标题】:Is there a way to add multiple labels at once to a Gmail thread in a google app script?有没有办法一次将多个标签添加到谷歌应用脚​​本中的 Gmail 线程?
【发布时间】:2018-08-10 10:08:34
【问题描述】:

我正在尝试以编程方式在 google-app 脚本中向 Gmail 线程添加一些标签。

现在使用thread.addLabel 函数。 因为我要向许多线程添加多个标签,所以这种方法首先很慢,其次在配额使用方面效率低下。我必须为每个线程的每个标签调用 thread.allLabel。

有没有办法将多个标签一起添加到 Gmail 线程/邮件? Gmail API 有一个thread.modify 函数,可用于添加多个标签。谷歌应用脚​​本中有类似的东西吗?

【问题讨论】:

    标签: google-apps-script gmail-api


    【解决方案1】:

    您想使用 Google Apps 脚本向线程添加多个标签。如果我的理解是正确的,那么使用 Advanced Google Services 的 Gmail API 怎么样?在 GmailApp 中,我找不到向线程添加多个标签的方法。所以我提出这个。我认为您可以使用gmail.users.messages.modify 来实现它。示例脚本如下。要使用此脚本,请在高级 Google 服务和 API 控制台中启用 Gmail API。

    在高级 Google 服务中启用 Gmail API v1

    • 在脚本编辑器上
      • 资源 -> 高级 Google 服务
      • 开启 Gmail API v1

    Enable Gmail API at API console

    • 在脚本编辑器上
      • 资源 -> 云平台项目
      • 查看 API 控制台
      • 在开始时,单击启用 API 并获取密钥等凭据。
      • 点击左侧的库。
      • 在搜索 API 和服务时,输入“Gmail”。然后点击 Gmail API。
      • 点击启用按钮。
      • 如果API已经开启,请不要关闭。

    如果您现在使用 Gmail API 的脚本打开脚本编辑器,您可以通过访问此 URL https://console.cloud.google.com/apis/api/gmail.googleapis.com/overview 为项目启用 Gmail API

    脚本流程:

    1. 检索标签列表。
    2. 使用标签名称检索标签 ID。
    3. 将标签添加到线程。

    示例脚本:

    var userId = "me";
    var threadId = "### thread ID ###"; // Please input a thread ID.
    var labels = ["### label name 1 ###", "### label name 2 ###"]; // Please input label names here.
    
    var labelList = Gmail.Users.Labels.list(userId).labels;
    var labelIds = labels.map(function(e){return labelList.filter(function(f){return f.name == e})[0].id});
    Gmail.Users.Messages.modify({"addLabelIds": labelIds}, userId, threadId);
    

    注意:

    • 这是一个简单的示例脚本。所以请根据您的环境进行修改。

    参考资料:

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

    【讨论】:

    • 感谢您的好建议。您在哪里可以看到modify 函数参数的文档? Gmail API Doc 只将一个对象传递给modify。 Apps 脚本sample code 不使用modify,而是使用一组不同的参数调用threads.list。您的答案中的示例类似于 Apps 脚本示例,但顺序不同。你是怎么知道参数的期望值的?
    • @Hakan Baba 我还确认了如何在developers.google.com/gmail/api/v1/reference/users/messages/… 使用modify 在本文档中,我看到addLabelIds[]removeLabelIds[] 作为属性名称。这意味着标签可以作为数组给出。所以我可以理解如何使用它。另外关于高级谷歌服务,我可以从文档中的示例脚本中理解。我对您的评论的理解正确吗?
    • 感谢您的帮助。我问了一个相关的问题here。感谢任何进一步的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2016-06-11
    • 2019-07-12
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多