【问题标题】: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,如果它有标签,它不会简单地返回,因此我想知道如何检查它是否有未读标签。对不起,如果这不清楚。谢谢!

标签: javascript jquery python html gmail-api


【解决方案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

    【讨论】:

      猜你喜欢
      • 2011-11-04
      • 2015-12-10
      • 2015-09-15
      • 2023-04-11
      • 1970-01-01
      • 2012-03-11
      • 2018-05-11
      • 2019-06-02
      • 2015-06-04
      相关资源
      最近更新 更多