我正在将 Gmail 推送通知与 Google PubSub 一起使用,并且有一个我想监控任何更改的自定义标签。我使用以下代码为标签注册 watch (标签的 ID 为 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();
}
watch 注册正常。问题是我会收到任何 Gmail 更改的推送通知,而不仅仅是标签下的更改。
是否支持自定义标签?
最佳答案
我注意到了同样的问题,但后来发现这是因为 API 的工作方式。您可以通过 LabelIds 过滤电子邮件,但只有当电子邮件被直接过滤到选定的自定义标签时,您才会收到通知。我猜它的设计而不是 API 中的缺陷。
要对此进行测试,请在 Gmail 中创建一个自定义过滤器,它将您的自定义标签直接应用于一组电子邮件,您应该会收到这些电子邮件的通知。
编辑(2015 年 6 月 11 日):
推送通知会向您发送 HistoryID 和用户的邮箱名称。作为响应,您的端点应该调用 userhistory.list() 并带有您想要监视更改的 HistoryID 和 LabelId。
$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);
上面是一个 PHP 代码片段,用于使用 historyID 和 labelID 过滤历史列表。
关于gmail-api - Gmail API Watch 未按标签过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30591302/