Gmail API Watch不按标签过滤

PNC*_*PNC 11 gmail-api

我正在使用Google推送通知与Google PubSub,并有一个自定义标签,我想监视任何更改.我使用以下代码为标签注册手表(标签的标识为Label_1)

WatchRequest wr = new WatchRequest();
wr.TopicName = "projects/" + primaryLink.ggProjectId + "/topics/iLink" + segmentId;
if (labels != null && labels.Count > 0)
{
    wr.LabelIds = new List<string>();
    wr.LabelIds.Add("Label_1");
    wr.LabelFilterAction = "include";
}

WatchResponse wrr = gs.Users.Watch(wr, emailAccount).Execute();
return "HistoryId " + wrr.HistoryId.ToString();
Run Code Online (Sandbox Code Playgroud)

}

手表注册正常.问题是我收到任何Gmail更改的推送通知,而不仅仅是标签下的更改.

是否支持自定义标签?

Fur*_* S. 0

我注意到了同样的问题,但后来发现这是由于 API 的工作方式造成的。您可以通过 LabelId 过滤电子邮件,但仅当电子邮件直接过滤到选定的自定义标签时,您才会收到通知。我猜是它的设计而不是 API 中的缺陷。

要对此进行测试,请在 Gmail 中创建一个自定义过滤器,该过滤器会将您的自定义标签直接应用于一组电子邮件,并且您应该会收到这些电子邮件的通知。

编辑(2015 年 6 月 11 日):推送通知向您发送 HistoryID 和用户的邮箱名称。作为响应,您的端点应使用您想要监视更改的 HistoryID 和 LabelId 调用 userhistory.list() 。

$opt_param = array();
$opt_param['startHistoryId'] = $historyID;
$opt_param['labelId'] = $labelID;
$opt_param['fields'] = 'nextPageToken,historyId,history/messagesAdded';

$service->users_history->listUsersHistory($userID, $opt_param);
Run Code Online (Sandbox Code Playgroud)

上面是一个PHP代码片段,用于使用historyID和labelID过滤历史列表。

  • 截至 2020 年 1 月 20 日,这仍然是一个问题。浪费了一整天的工作。耶耶 (6认同)
  • 我从 Google 团队之一那里获得了该领域的以下更新“您应该能够通过您指定的标签 ID 来限制 watch(),但我可以确认它现在不适用于 *user* 标签。逻辑和错误相当复杂,我们正在处理它,但没有预计到达时间” (4认同)
  • @PNC 问题是 watch() 挂钩只为您提供每个事件的 HistoryID 和邮箱,无论您在创建监视请求时指定什么 LabelId。HistoryID 是邮箱范围内的 ID,而不是 LabelID 范围内的 ID。因此,无论标签的任何内容发生变化,HistoryID 都会递增。为了响应推送通知,您的端点应该调用historyList.list()。您可以在此处过滤带有要监视的 labelID 的消息。 (3认同)
  • 截至 2020 年 4 月 18 日仍然存在问题 (3认同)
  • 谷歌修复过这个问题吗?我仍然遇到同样的问题,过滤器不起作用。 (2认同)
  • 截至 2020 年 4 月 6 日仍然存在问题 (2认同)