检查邮件是不是被阅读,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的主要内容,如果未能解决你的问题,请参考以下文章

在 emacs 24 中阅读电子邮件(来自 gmail)

如何检查用户是不是有gmail帐户

如何使用 Google Mail API 检查邮件是不是被标记为“重要”?

检查Gmail帐户是为了跟踪使用Python的百分比

是否有谷歌 api 来验证 gmail 是否在 java 中有效?

使用 Gmail 的 .NET api 阅读大尺寸电子邮件