检查邮件是不是被阅读,gmail api
Posted
技术标签:
【中文标题】检查邮件是不是被阅读,gmail api【英文标题】:Check if mail is read, gmail api检查邮件是否被阅读,gmail api 【发布时间】:2017-04-21 20:19:38 【问题描述】:我正在开发一个 gmail 应用程序(您可能会知道您是否阅读了我的其他问题),我可以列出我的前 10 封电子邮件,但是我无法知道它们被阅读与否的天气。有谁知道我会怎么做?谢谢!
【问题讨论】:
不知道你是怎么做到的,但那不就是if (email == opened) //mark as read
吗?根据您获取邮件的方式,是否有数据库后端等等,这将是不同的解决方案。您甚至可以根据查看与否在 localStorage 中存储一个布尔值(未查看 == 0,查看 == 1)
我也认为它会这么简单,但是 gmail api 的工作方式是它使用标签,如果电子邮件被阅读它没有未读标签。但是根据developers.google.com/gmail/api/v1/reference/users/labels,如果它有标签,它不会简单地返回,因此我想知道如何检查它是否有未读标签。对不起,如果这不清楚。谢谢!
【参考方案1】:
如果我列出我的最新消息:
请求
GET https://www.googleapis.com/gmail/v1/users/me/messages?maxResults=1&access_token=ACCESS_TOKEN
响应
"messages": [
"id": "158d822014b7887b",
"threadId": "158d822014b7887b"
],
"nextPageToken": "17683191771541399341",
"resultSizeEstimate": 2
然后得到消息:
请求
GET https://www.googleapis.com/gmail/v1/users/me/messages/158d822014b7887b?format=metadata&access_token=ACCESS_TOKEN
响应
"id": "158d822014b7887b",
"threadId": "158d822014b7887b",
"labelIds": [
"UNREAD",
"CATEGORY_SOCIAL",
"INBOX"
],
...
您可以看到该消息有一个labelId
,其值为UNREAD
。如果邮件中没有这个labelId
,则会被读取。
var isRead = message.labelIds.indexOf("UNREAD") === -1;
【讨论】:
【参考方案2】:对于其他想要这样做的人来说,这里有一段简单的代码可以做到。
if (message.labelIds[0] === 'UNREAD')
//do somthing
【讨论】:
UNREAD
字符串不一定是数组中的第一个。我更新了我的答案。
根据我的经验(这很容易出错),它一直是第一位的。无论如何感谢您的建议!【参考方案3】:
使用以下请求仅获取未读消息
GET https://www.googleapis.com/gmail/v1/users/me/messages?q=is:unread&maxResults=1&access_token=ACCESS_TOKEN
参考:https://support.google.com/mail/answer/7190?hl=en
【讨论】:
以上是关于检查邮件是不是被阅读,gmail api的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Google Mail API 检查邮件是不是被标记为“重要”?