【问题标题】:How do I get full messages and attachments from my Gmail inbox using an API?如何使用 API 从我的 Gmail 收件箱中获取完整的邮件和附件?
【发布时间】:2016-09-28 20:16:45
【问题描述】:

我想从我的 Gmail 下载整个收件箱(电子邮件正文和附件)。使用消息 ID,我可以获得 Gmail.Message 对象,但这些对象似乎只包含 sn-ps(大约 200 个字符)。

对于 C#,有没有办法使用 Gmail API 以 XML 格式获取整个收件箱?

【问题讨论】:

  • 您所做的 API 调用究竟是什么?你能提供HTTP请求吗?

标签: c# .net gmail-api


【解决方案1】:

gmail API 请参考https://developers.google.com/gmail/api/v1/reference/users/messages/list#parameters

HTTP 请求

获取https://www.googleapis.com/gmail/v1/users/userId/messages

确保您在请求中应用了正确的授权标头。

【讨论】:

    【解决方案2】:

    根据the documentation,可以使用

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

    这是您正在使用的电话吗?它说默认格式是Full

    "full":返回完整的电子邮件消息数据,正文内容在有效负载字段中解析;未使用原始字段。 (默认)

    要获取附件,您可以尝试 Users.messages.attachments

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

    但为此,您需要附件 ID。您可能想查看显示可用数据的User.messages overview,也许您可​​以尝试Payload 调用?

    【讨论】:

      【解决方案3】:

      查看 API,您需要先向 /users/me/threads 发出请求,然后再向 users/me/threads/<id> 发出请求,在该响应中有一个 body.data 值,它是 base 64 编码的。我不是 100% 确定使用 c# API,但我假设你会做类似的事情:

      var request = service.Users.Threads.List("me");
      
      var labels = request.Execute().Threads;
      foreach(var thread in lables){
          var threadReqeust = service.Users.Threads.Get("me", thread.Id);
          var data = threadReqeust.Execute();
          //you have your entire message now
      }
      

      (请注意这是半伪代码,因为我没有使用 gmail api 进行检查)

      (https://developers.google.com/gmail/api/v1/reference/users/threads/list) (https://developers.google.com/gmail/api/v1/reference/users/threads/get) “如果正文数据包含在单独的附件中,则存在附件 ID。”

      另一种选择是始终使用 IMAP 登录(使用 ImapX 或等效的),并以这种方式收集数据,但使用 API 会更好。

      【讨论】:

      • 这是我遵循的一种方式。但是没有字段“body”只有“sn-p”
      • 尝试查看请求中的 Format 属性 (developers.google.com/gmail/api/v1/reference/users/threads/get) 以及线程项 (developers.google.com/gmail/api/v1/reference/users/…) 中的(消息)列表
      • 如何配置格式属性?我找到了 Format 属性: var getReq = UsersResource.MessagesResource.GetRequest.FormatEnum.Full;但是如何使用Get方法呢?我必须使用服务。正确的? service.Users.Messages.Get("me", item.Id).Execute() - 但方法 get 没有任何重载,如 Format 之类的第三个参数。
      猜你喜欢
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 2015-04-07
      • 2012-07-19
      • 2014-10-10
      • 1970-01-01
      • 2016-05-23
      相关资源
      最近更新 更多