微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Gmail API - 如何查看电子邮件打开日期? 问题:解决方法:进一步阅读:

如何解决Gmail API - 如何查看电子邮件打开日期? 问题:解决方法:进一步阅读:

我需要使用 Google Api 来检索第一次将电子邮件标记为查看的时间(特别是在打开电子邮件时)。

我使用 GET https://gmail.googleapis.com/gmail/v1/users/{userId}/messages/{id} 仅请求元数据来获取消息,但响应如下所示:

{
  "id": "17a05bd8db1609b9","threadId": "17a05bd8db1609b9","labelIds": [
    "CATEGORY_PROMOTIONS","UNREAD","INBox"
  ],"payload": {
    "partId": "","headers": [
      {
        "name": "Delivered-To","value": "{EMAIL ADDRESS}"
      },{
        "name": "Received","value": "by 2002:a55:c51e:0:b029:e9:12c1:65a9 with SMTP id b30csp1876084egk;        Sun,13 Jun 2021 07:19:06 -0700 (PDT)"
      },{
        "name": "X-Google-Smtp-Source","value": "ABdhPJzPcWJR1zsvAH654luf+agnL6i6CGj8S/jO1MDZVz3yPHcqE7y37chZ7euL02n40t6idub/"
      },{
        "name": "X-Received","value": "by 2002:a9d:62ce:: with SMTP id z14mr10328566otk.255.1623593946243;        Sun,{
        "name": "ARC-Seal","value": "i=1; a=rsa-sha256; t=1623593946; cv=none;        d=google.com; s=arc-20160816;        b=L8L+Vz979TjsIDtXAyhnPBQUmW8Njjz+DiyScOHFvyHbmOC9sIyaH5AFOafzFou45N         nTtpzyq9pSlZ8VWd6N9N+NYcdldf67A7/FarG9iIs6EvddVYcpbEqdTPOyMt6/mluVQO         utRoX3ma1TFAIyXoQLvxfPZ5QZLZNQFpPwYWGIkB+/8r45OKkqhuWtX8d93InKgpoVIf         NQjaI4Tnr2AJWWJjiALL8bLoCe1QvA3mV+I1sTbGRPZAIPcKfm+nB3smYgkH7f9C+1+8         iXR/45AWh+9Sxd1IFrHHokfTEOQvHEWDXm8BBagCFaRFJv45V+FIyWGJKKpL4UCI0oab         7ZRg=="
      },{
        "name": "ARC-Message-Signature","value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;        h=list-unsubscribe-post:list-unsubscribe:mime-version:subject         :message-id:to:reply-to:from:date:dkim-signature:dkim-signature;        bh=3CtcdjdiFbH5c/+55q2hcIqL8foXcatroOK85FVqTxk=;        b=0/F/Qn1AmdXlp7t9Or1qvUB+6xmvr2Ewxm33BtMBo956QCvgQQ5qilxt3ZI1Kqx+YB         zuQZLKRcG7T1kRqvsq3ERdrAqAr6P8+I6j9yWw6XaI7uuU8crVbnEjbkUAheFjmNeXOP         ZcuwtlUPlgDiyOmE6ND2HWLrpUcCKxx/TY17fYkR/H08yr44BqtTXSJVUG12n5Sjb8iA         nnFyJHYBRg2Elw7vMnUl+wiO0k1EH9C7ltwTJCjVsDPe0LcvcjtDcr0R4i24sYbNTDgN         fyOsKMfJnPAE/oLk6iZhd0NvWVkUUvop6b8kdZtLfVH1jLMIYPBOlNjeSct+yfmtrHWt         Vrwg=="
      },{
        "name": "ARC-Authentication-Results","value": "i=1; mx.google.com;       dkim=pass header.i=@emails.waves-audio.com header.s=gears header.b=AAcEguTx;       dkim=pass header.i=@d.messagegears.io header.s=gears header.b=jvFNHriZ;       spf=pass (google.com: domain of 346064636000c23595702-b21164-83d6be2bdc4542f7a574924245020c5e@emails.waves-audio.com designates 135.84.217.27 as permitted sender) smtp.mailfrom=346064636000c23595702-b21164-83d6be2bdc4542f7a574924245020c5e@emails.waves-audio.com"
      },{
        "name": "Return-Path","value": "\u003c346064636000c23595702-b21164-83d6be2bdc4542f7a574924245020c5e@emails.waves-audio.com\u003e"
      },"value": "from mta0201-27.emails.waves-audio.com (mta0201-27.emails.waves-audio.com. [135.84.217.27])        by mx.google.com with ESMTPS id t22si9652818otl.163.2021.06.13.07.19.06        for \u003c{EMAIL ADDRESS}\u003e        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);        Sun,{
        "name": "Received-SPF","value": "pass (google.com: domain of 346064636000c23595702-b21164-83d6be2bdc4542f7a574924245020c5e@emails.waves-audio.com designates 135.84.217.27 as permitted sender) client-ip=135.84.217.27;"
      },{
        "name": "Authentication-Results","value": "mx.google.com;       dkim=pass header.i=@emails.waves-audio.com header.s=gears header.b=AAcEguTx;       dkim=pass header.i=@d.messagegears.io header.s=gears header.b=jvFNHriZ;       spf=pass (google.com: domain of 346064636000c23595702-b21164-83d6be2bdc4542f7a574924245020c5e@emails.waves-audio.com designates 135.84.217.27 as permitted sender) smtp.mailfrom=346064636000c23595702-b21164-83d6be2bdc4542f7a574924245020c5e@emails.waves-audio.com"
      },{
        "name": "DKIM-Signature","value": "v=1; a=rsa-sha256; c=relaxed/relaxed; s=gears; d=emails.waves-audio.com; h=Date:From:Reply-To:To:Message-ID:Subject:MIME-Version:Content-Type: List-Unsubscribe:List-Unsubscribe-Post; i=news@emails.waves-audio.com; bh=3CtcdjdiFbH5c/+55q2hcIqL8foXcatroOK85FVqTxk=; b=AAcEguTxQVhKb8tKVqR1lfLjeU7RxkHAe91vfNVg5UdOTOvGfi+oPi4wnn3dR/XUuFYxu47u9Cfo   g+jeKSONECg68D/xEtQCnf0MfO71lKSLXDghlYhhaAh5Jjd2IH88b+2hM5fBFN7Fz7lDUp1+Bw/0   U9IH4Ei+w7E8RXs/D6E="
      },"value": "v=1; a=rsa-sha256; c=relaxed/relaxed; s=gears; d=d.messagegears.io; h=Date:From:Reply-To:To:Message-ID:Subject:MIME-Version:Content-Type: List-Unsubscribe:List-Unsubscribe-Post; bh=3CtcdjdiFbH5c/+55q2hcIqL8foXcatroOK85FVqTxk=; b=jvFNHriZksLExFsp7Br0sf598nLFywhbNS7N+70VY0zeKKLxvm0G4EKNUJ3Fe+3a5oWYWa7HBcJS   vq8hAERdI6vQjNNZHYJifHodm4+B04CXCDev9Il3Sx3qB+CYDYymKyeiEycsHWejCdJilo8HN+GE   cxv+AtCFwq2s68gY/r0="
      },{
        "name": "Date","value": "Sun,13 Jun 2021 10:04:23 -0400 (EDT)"
      },{
        "name": "From","value": "Waves Audio \u003cnews@emails.waves-audio.com\u003e"
      },{
        "name": "Reply-To",{
        "name": "To",{
        "name": "Message-ID","value": "\u003c618286522.102678350.1623593063602.JavaMail.cloud@mta0201.messagegears.net\u003e"
      },{
        "name": "Subject","value": "ENDS TODAY ⏰ ALL Compressors $29.99"
      },{
        "name": "MIME-Version","value": "1.0"
      },{
        "name": "Content-Type","value": "multipart/mixed; boundary=\"----=_Part_102678347_1640882403.1623593063602\""
      },{
        "name": "X-Original-To",{
        "name": "List-Unsubscribe","value": "\u003chttp://track.waves-audio.com/list-unsub/uc/2/1cla%3ANDYwNjQ2MzY%3AMDItYjIxMTY0LTgzZDZiZTJiZGM0NTQyZjdhNTc0OTI0MjQ1MDIwYzVl%3AYXJzZXJlZ0BnbWFpbC5jb20%3AMTY1NjkwNQ%3An%3An%3A_8LcuFe86CJ4F5wm08TiWA\u003e,\u003cmailto:unsub-346064636000c23595702-b21164-83d6be2bdc4542f7a574924245020c5e@emails.waves-audio.com\u003e"
      },{
        "name": "List-Unsubscribe-Post","value": "List-Unsubscribe=One-Click"
      }
    ]
  },"sizeEstimate": 51137,"historyId": "6952408","internalDate": "1623593063000"
}

这不会显示任何像 First opening 这样的字段,也没有类似的东西。

我正在考虑的另一种方法是检查邮件标签的历史记录,如果我能够检索添加 UNREAD labelId 的日期,我将能够确定查看电子邮件的时间。

解决方法

问题:

在 Gmail API 中,没有直接的方法来检索特定邮件的阅读日期。

在 Gmail 本身中,有 requesting a read receipt 选项,但这不会自动应用于所有电子邮件,也不适用于 API(考虑为此提交 feature request in Issue Tracker)。

使用 users.history 可以跟踪标签的更改(例如 UNREAD),但相关的 History 资源不包括这些标签更改发生的日期的信息,因此不会对您的情况有用(除此之外,历史记录会在很短的时间后过期,通常大约一周或更长时间 - 请参阅 Limitations)。

解决方法:

考虑到所有这些,我认为目前最好的方法是开发 Workspace Gmail add-on。有了这个,您可以添加一个 contextual trigger,每次打开消息时都会触发一个函数(只要使用了附加组件)。

然后可以使用被触发的函数来存储当前日期以及 messageId(例如,使用 PropertiesService。这样,您可以跟踪每条消息的打开日期。在这种情况下,由于 Gmail event object,可以在您的函数中检索 messageId(或 threadId,就此而言)。

更具体地说,您的上下文功能可能是以下几行:

function onGmailContextual(e) {
  const messageId = e.gmail.messageId;
  const userProps = PropertiesService.getUserProperties();
  let dateRead;
  const messageProp = userProps.getProperty(messageId);
  if (messageProp) { // If it exists,the message was read before
    dateRead = new Date(JSON.parse(messageProp)); // Retrieve previously store read date
  } else { // If it doesn't exist,the message was not read before (at least while the add-on was open)
    dateRead = new Date(); // Get current date
    userProps.setProperty(messageId,JSON.stringify(dateRead.getTime())); // Store current date as reading date for this message
  }
  // ...
}

请注意,这仅适用于打开加载项时打开的邮件,因此您不能使用它来检索旧邮件的阅读日期

进一步阅读:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。