如何搜索特定字符串但每个电子邮件地址仅 return 1 封电子邮件?

How to search for specific string but only return 1 email per email address?

gmail API 是否允许搜索字符串和 return 所有具有此字符串的邮件,但将列表限制为每个电子邮件地址 1 封电子邮件。

例如,我想查找包含特定用户名的所有邮件,但列表中每个地址只包含一封电子邮件。

遗憾的是,Gmail API 不支持这些类型的复杂查询。

不过,按照这些思路将完成它:

  1. List messages 将您的搜索字符串作为 q 参数,直到响应中没有 nextPageToken(然后您将获得查询).

  2. Get all matching messages, only asking for the From-header, and find all unique senders yourself (batch requests 非常适合这个用例)。

例子

列出消息 ID

q = feel the bern
fields = messages(id),nextPageToken

GET https://www.googleapis.com/gmail/v1/users/me/messages?q=feel+the+bern&fields=messages(id)%2CnextPageToken&access_token={YOUR_API_KEY}

回应

{
 "messages": [
  {
   "id": "151c1de994ad5e43"
  },
  {
   "id": "1514f614e6c07c3f"
  }, ...
 ]
}

获取每条消息(批量)

format = metadata
metadataHeaders = from
fields = id,payload/headers

GET https://www.googleapis.com/gmail/v1/users/me/messages/151c1de994ad5e43?format=metadata&metadataHeaders=from&fields=id%2Cpayload%2Fheaders&access_token={YOUR_API_KEY}

回应

{
 "id": "151c1de994ad5e43",
 "payload": {
  "headers": [
   {
    "name": "From",
    "value": "Official Bernie Store <info@berniesanders.com>"
   }
  ]
 }
},
{
 "id": "151c1de994ad3e22",
 "payload": {
  "headers": [
   {
    "name": "From",
    "value": "Emil Tholin <emtholin@gmail.com>"
   }
  ]
 }
}, ...

然后您可以通过电子邮件地址过滤掉邮件,然后获取剩余邮件的全部邮件。