получение идентификаторов сообщений из gmail происходит очень медленно

#c# #.net #gmail-api #google-api-dotnet-client

#c# #.net #gmail-api #google-api-dotnet-client

Вопрос:

я создал библиотеку классов, используя .net версии 4.5, а язык — c #. получение всего 6 электронных писем из Gmail API занимает более нескольких минут. приведенный ниже код, который я использую для получения сведений о почте

 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;
            }
 }
  

Комментарии:

1. Похоже, проблема с вашим подключением к Интернету. Не уверен, как мы можем ответить, я не вижу ничего плохого в опубликованном вами коде. Это может быть что угодно.

2. есть ли у вас какие-либо идеи, как я могу реализовать частичный ответ в этом коде, чтобы я мог извлекать только те параметры, которые мне нужны, а не извлекать все данные?

3. согласно документам Gmail API, list возвращаемые ресурсы содержат только идентификатор и ThreadId — так что, по крайней мере, list вызов возвращает не все данные.

4. @ShubhamAngne попробуйте использовать параметр Fields, это позволит вам ограничить ответ.

5. я добавил код, который я использую для получения сведений о почте, можете ли вы помочь передать параметр полей @DaImTo

Ответ №1:

Что вы можете сделать, так это попробовать поработать с чем-то, называемым частичным ответом самый простой способ проверить это — зайти на страницу «Попробуйте меня», попробуйте меня для проверки этого вам понадобится идентификатор сообщения

Полный ответ от message.get будет выглядеть следующим образом

 {
  "id": "1742abfd3a4f1c5",
  "threadId": "1742a8c81816e51",
  "labelIds": [
    "CHAT"
  ],
  "snippet": "Iamp;#39;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.

Комментарии:

1. я заставил это работать следующим образом a.Format = UsersResource. MessagesResource. GetRequest. Форматирование. Метаданные; Список<строка> заголовки = новый список<строка> (); заголовки.Добавить («Дата»); заголовки.Добавить («Тема»); заголовки.Добавить(«Cc»); заголовки.Добавить(«От»); заголовки.Добавить («Bcc»); заголовки.Добавить («Кому»); a.MetadataHeaders = заголовки;