2015-04-16 3 views
1

Я пытаюсь получить счет непрочитанного письма с помощью API Google, но не могу. Любая помощь высоко ценится. Я не получаю никакой ошибки, но счетчик не соответствует фактическому номеру, указанному в gmail.Получить непрочитанные письма от Google API

try 
     { 
      String serviceAccountEmail = "[email protected]"; 
      var certificate = new X509Certificate2(@"C:\Projects\xxx\xyz\API Project-xxxxx.p12", "notasecret", X509KeyStorageFlags.Exportable); 

      ServiceAccountCredential credential = new ServiceAccountCredential(
      new ServiceAccountCredential.Initializer(serviceAccountEmail) 
      { 
       User = "[email protected]", 

       Scopes = new[] { Google.Apis.Gmail.v1.GmailService.Scope.GmailReadonly } 
      }.FromCertificate(certificate)); 


      var gmailservice = new Google.Apis.Gmail.v1.GmailService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = "GoogleApi3", 
      }); 

      try 
      {     

       List<Message> lst = ListMessages(gmailservice, "[email protected]", "IN:INBOX IS:UNREAD"); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("An error occurred: " + e.Message); 
      } 
     } 
     catch (Exception ex) 
     { 

     }  

ответ

2

Вобщ: labels.get (ID = «INBOX») и имеет те виды статистики (сколько сообщений в этой метке, сколько непрочитанные, и то же самое для потоков).

https://developers.google.com/gmail/api/v1/reference/users/labels/get

+0

Спасибо за ваш ответ Эрик, но не повезло. – GVMK

+2

Не повезло, что? Можете ли вы предоставить контекст/что происходит и как оно отличается от того, что я сказал? Использование игровой площадки API показывает, что она работает, как я описал ... –

+1

Почему она извлекает разные цифры, чем я вижу в своей учетной записи gmail? – erdomester

2

Вы можете использовать ListMessages method from the API пример (для полноты) для поиска:

private static List<Message> ListMessages(GmailService service, String userId, String query) 
     { 
      List<Message> result = new List<Message>(); 
      UsersResource.MessagesResource.ListRequest request = service.Users.Messages.List(userId); 
      request.Q = query; 

      do 
      { 
       try 
       { 
        ListMessagesResponse response = request.Execute(); 
        result.AddRange(response.Messages); 
        request.PageToken = response.NextPageToken; 
       } 
       catch (Exception e) 
       { 
        Console.WriteLine("An error occurred: " + e.Message); 
       } 
      } while (!String.IsNullOrEmpty(request.PageToken)); 

      return result; 
     } 

Вы можете использовать этот метод поиска, чтобы найти непрочитанные сообщения, например, как это:

List<Message> unreadMessageIDs = ListMessages(service, "me", "is:unread"); 

Параметр q (запрос) может быть любым видом материала (это то же самое, что и панель поиска gmail в верхней части веб-интерфакса д), как указано здесь: https://support.google.com/mail/answer/7190?hl=en.

Обратите внимание, что у вас установлено только несколько параметров объектов Message. Если вы хотите извлечь сообщения, которые вы должны будете использовать GetMessage method from the api:

public static Message GetMessage(GmailService service, String userId, String messageId) 
    { 
     try 
     { 
      return service.Users.Messages.Get(userId, messageId).Execute(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("An error occurred: " + e.Message); 
     } 

     return null; 
    } 

Я согласен, что API не прямо вперед, и пропускает много функциональности.

Смежные вопросы