【问题标题】:how can I get list of email in gmail api with title and sender of email?如何在 gmail api 中获取电子邮件列表以及电子邮件的标题和发件人?
【发布时间】:2020-01-13 02:06:07
【问题描述】:

我尝试过使用 获取https://www.googleapis.com/gmail/v1/users/userId/messages

但只获取 id 和 threadId 作为响应。

我想显示带有标题和来自电子邮件的电子邮件列表。是否存在获取信息的 api 或任何我可以获取的方式?

【问题讨论】:

  • @DalmTo 你能给个方法吗?

标签: google-api gmail-api


【解决方案1】:

Gmail API 的设计方式是,

  1. 您需要使用 GET https://www.googleapis.com/gmail/v1/users/userId/messages 获取所有感兴趣的电子邮件的 ID(您可以使用搜索参数 q 过滤结果) - 就像您已经做过的那样
  2. 您需要使用GET https://www.googleapis.com/gmail/v1/users/userId/messages/id 的 ID 分别检索每条消息

如果您使用您选择的语言编写代码,您可以使用循环自动执行此过程。

示例如何使用Apps Script

function myFunction() {
  var myMessages=Gmail.Users.Messages.list("me",{'maxResults': 5 }).messages;
  Logger.log(myMessages);
  for(var i=0;i<myMessages.length;i++){
    var id=myMessages[i].id;
    Gmail.Users.Messages.get('me', id).payload.headers.forEach(function(e){
      if(e.name=="Subject"||e.name=="From"){
        Logger.log(e.name+": "+e.value)
      }
     }
    );
  }
}

【讨论】:

    【解决方案2】:

    user messages.list 方法只返回消息 id 和线程 id 的消息列表。这是 API 本身的限制,您无法更改它。它是一个免费的 api,我们受到 google 的限制。

    {
     "messages": [
      {
       "id": "16d1f7849145662a",
       "threadId": "16d1f55457d4e145"
      },
      {
       "id": "16d1f69d541016ee",
       "threadId": "16d1f55457d4e145"
      },
    

    为了获得有关该消息的更多信息,您需要在每条消息上添加message.get

    GET https://www.googleapis.com/gmail/v1/users/userId/messages/id
    

    抱歉,这是获得大量信息的唯一途径。

    批处理

    您可以尝试批处理端点batch 在单个批处理请求中您最多只能调用 100 个。如果您需要进行更多调用,请使用多个批处理请求。

    邮递员标题

    内容类型多部分/混合;边界=batch_foobarbaz;类型=应用程序/http

    授权承载 ya29.GluBB7_cEfLMThXKuxR_9g8YyjSTLwBHRHdPtiYXwDABKQlrbxEyFqSFsnFYTs5b54W7

    接受编码应用程序/gzip

    邮递员身体

    --batch_foobarbaz
    Content-Type: application/http
    
    
    GET gmail/v1/users/me/messages/16d24956228a98c4
    Accept: application/json; charset=UTF-8
    
    --batch_foobarbaz
    Content-Type: application/http
    
    
    GET gmail/v1/users/me/messages/16d24956228a98c4
    Accept: application/json; charset=UTF-8
    
    --batch_foobarbaz--
    

    SMTP

    除此之外,您还可以访问smtp server directly。这将需要一种可以处理对邮件服务器的直接调用的编程语言。

    【讨论】:

    • @DalmTo 如果我想像在 gmail 中一样显示列表,那么对于每条消息我都必须提出请求。它会增加服务器的负载。
    • 是的,但你应该有大量的配额,一旦你有一封电子邮件,你可以缓冲列表,它不应该改变,除了可能得到一个线程ID。您可以尝试使用批处理端点。您可以在一个请求中提出多个请求。
    • @DalmTo 在gmail的情况下,要获取列表以及标题和发件人,如何修改批处理请求?
    • @Sa1 关于批处理的文档很少。您将需要检查原始文档并从中构建它。如果您使用的是客户端库,它们都支持批处理,并且可能有一个更易于使用的选项。我稍微编辑了原始批处理请求,它应该是这样的。
    • 请 -1 评论 -1 的原因,以便我可以改进答案并让您更清楚地理解。这都是直接在文档之外的。
    猜你喜欢
    • 2020-09-04
    • 2014-09-07
    • 2021-04-27
    • 2018-08-25
    • 2018-11-03
    • 2015-04-29
    • 2021-04-19
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多