问题:
您可以应用于 Gmail 推送通知的唯一过滤器是从哪个标签/s 中检索通知,如 here 所示。因此,在此阶段无法根据(1)谁发送消息,(2)电子邮件主题和(3)电子邮件是否具有特定的PDF附件来过滤消息,而是在收到通知之后进行。不过幸运的是,您无需手动查找这些消息,您可以编写应用程序来为您完成这项工作。
工作流程:
- 步骤 #1。为所有 INBOX 设置通知并检索 startHistoryId:如前所述,您必须接收所有 INBOX 的通知,因为没有更具体的过滤器可用。调用Users: watch,在labelIds 字段中提供INBOX,在topicName 中提供topic you created,将有效地配置通知。对watch 的回复有this shape:
{
historyId: 1234567890
expiration: 1431990098200
}
其中historyId 指邮箱的当前状态。让我们将它存储在某个地方,并称之为startHistoryId。
- 步骤 #2。获取 INBOX 更改:完成第 1 步后,每当您的 INBOX 发生更改时,您的应用程序都会收到描述更改的通知消息。每当收到通知时,您都想获取有关对 INBOX 所做的特定更改的信息,为此,您应该致电 history.list()。
也就是说,您的应用程序应该在每次收到通知时调用history.list()。现在,您想要获取自上次以来的更改,这就是为什么您应该提供在步骤 1 中检索到的 historyId 作为参数 startHistoryId。如果您只想检索新邮件(而不是删除或标签编辑/删除),您可以将historyTypes 设置为messageAdded。请求可能是这样的:
{
userId: “your-email-address”,
historyTypes: “messageAdded”,
startHistoryId: “your-start-history-id”
}
作为响应,您会得到如下信息:
{
"history": [
{
"id": unsigned long,
"messages": [
users.messages Resource
],
"messagesAdded": [
{
"message": users.messages Resource
}
]
}
],
"nextPageToken": string,
"historyId": unsigned long
}
在这里,您应该检索 historyId,将在下次调用 history.list() 时用作 startHistoryId,以及 messagesAdded ,其中包含您要查找的新邮件的IDs(似乎只填充了ID 和threadId)。
- 第 3 步:过滤消息:现在您有了自上次 (messagesAdded) 以来已更改的消息 IDs 的列表,您想知道其中哪些符合您的条件.要知道这一点,您必须遍历messagesAdded 中的所有IDs,并为每个ID 调用Users.messages: get。这将返回相应的message resource。对于每条消息,您必须检查是否满足条件:
发件人电子邮件:在资源内部,访问headers(message[“payload”][“headers”]),然后循环遍历它们,寻找@ 987654357@ 是From。你要检查对应的value是不是你要找的邮箱。
主题:与步骤 (a) 一样,访问 headers 并查找 name 为 Subject 的标头。对应的value 是电子邮件主题。检查是否以[Important]开头。
附件:您必须在message[“payload”][“parts”] 中查找电子邮件附件。该过程有点复杂,但请参阅this related question。
参考:
Gmail API: Push Notifications