使用 api 在 Gmail 邮件上取消固定或删除星标

Unpin or remove star on Gmail Message using the api

我正在尝试更新 gmail 中的邮件以删除图钉,我想我可以使用标签来完成。但是我收到一个错误的请求错误。

有人知道如何做到这一点吗?

如果您不共享您的代码和收到的确切错误消息,很难说问题出在哪里,但是要从消息中删除星号,您可以使用 messages.modify() 和正文removeMessageLabelIds 列表和 STARRED 作为要删除的标签。我没有测试固定,但我相信那会删除 INBOX 标签。

Tl;DR: 如果你发现这个帖子是因为你想在 Google 收件箱中禁用固定(可能是因为你不喜欢延后的电子邮件自动固定,破坏它们不在捆绑包中),不要试图用 Gmail API 来解决这个问题。也许试试 this TamperMonkey user script

详情:

我想对在尝试做我刚刚浪费了很多时间的事情时发现此线程的任何人添加一个可怕的警告:

如果您不喜欢延后的电子邮件在取消延后时被固定,请不要尝试使用 Gmail API 来解决这个问题。您可能知道电子邮件是否在收件箱中(相对于正在存档)handled by an INBOX label, and you might know that you can subscribe to push notifications 关于邮箱。

所以您阅读了 Paul McManus 上面的评论,其中提到使用 Gmail API 删除并重新添加收件箱标签会取消固定您的邮件。您将其放在一起并认为它会解决您的问题 - 您将订阅有关邮箱更改的推送通知,然后使用 history/list to find recent messages that gained the INBOX label, and you'll use message/modify 删除并重新添加收件箱标签。

问题是 history/list 不显示电子邮件取消延后的变化(即使它们获得了 INBOX 标签)。所以你不知道要取消固定哪条消息。

发现之后,我又想通了这个问题,明白了一个user script that calls the click event on un-pin buttons would also solve the problem, and that's just a few lines of Javascript. You can get it here。唯一的问题是它不适用于您的 phone.

我为解决同样的问题所做的是。

  1. 使用 Threads.list API 和 is:pinned 的查询(q 参数)来获取所有 "pinned".[=12 的线程=]

  2. 遍历这些线程并使用 Threads.modify API 首先删除 "Inbox" 的 LableIds,然后使用 addLabelIds 添加回收件箱。这从线程中删除了图钉,并按照我想要的方式将其分类在我的收件箱中。

当然,每次您使用 Google 的收件箱暂停电子邮件时,您都必须再次 运行 相同的脚本。我还没有想出最好的自动化方法,但可能使用推送通知来更改收件箱可以做到这一点。