从gmail获取消息ID是非常慢的

问题描述

我使用.net 4.5版创建了类库,语言为c#。从gmail API中仅提取6封电子邮件需要花费超过几分钟的时间。 我用来获取邮件详细信息的以下代码

public Message GetMailDetails(GmailService service,string EmailId,string MessageID)
{
            try
            {
                var a = service.Users.Messages.Get(EmailId,MessageID);
                a.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Metadata;
                var retMessage = a.Execute();


                //a.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Metadata;
                //retMessage = a.Execute();
                //a.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Minimal;
                //retMessage = a.Execute();
                //a.Format = UsersResource.MessagesResource.GetRequest.FormatEnum.Raw;
                //retMessage = a.Execute();
                return service.Users.Messages.Get(EmailId,MessageID).Execute();
            }
            catch (Exception e)
            {
                return null;
            }
 }

解决方法

您可以做的是尝试使用名为Partial response的东西进行测试,最简单的方法是浏览“尝试我”页面try me,您将需要一个消息ID来对此进行测试

来自message.get的完整回复如下所示:

{
  "id": "1742abfd3a4f1c5","threadId": "1742a8c81816e51","labelIds": [
    "CHAT"
  ],"snippet": "I'm surprised nobody questioned me when I said that the tag was 2 weeks old,but clearly has questions from longer than 2 weeks ago. {:","payload": {
    "partId": "","mimeType": "text/html","filename": "","headers": [
      {
        "name": "From","value": "Axxxx"
      }
    ],"body": {
      "size": 139,"data": "SSYjMzk7bSBzdXJwcmlzZWQgbm9ib2R5IHF1ZXN0aW9uZWQgbWUgd2hlbiBJIHNhaWQgdGhhdCB0aGUgdGFnIHdhcyAyIHdlZWtzIG9sZCwgYFybHkgaGFzIHF1ZXN0aW9ucyBmcm9tIGxvbmdlciB0aGFuIDIgd2Vla3MgYWdvLiB7Og=="
    }
  },"sizeEstimate": 100,"historyId": "6172496","internalDate": "1598445048740"
}

通过将参数字段添加到您的请求fields = id,threadid中,响应如下所示

{
  "id": "1742abfd3a4f16c5","threadId": "1742a8c181816e51"
}

基本上,您只请求要查看的数据字段。

示例

var request =  service.Users.Messages.Get(EmailId,MessageID)
request.Fields = "id,threadid";
var response = request.Execute();

当您尝试从数组或列表中挑选东西时,字段可能会有些棘手,我真的建议在try me中对其进行测试。