Get Unread emails from Google API

 ̄綄美尐妖づ 提交于 2019-12-08 05:44:16

问题


I'm trying to get the count of unread email using google API, but not able. ANy help is highly appreciated. I'm not getting any error, but the count doesnt match the actual number shown in gmail.

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

            ServiceAccountCredential credential = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(serviceAccountEmail)
            {
                User = "xxx@gmail.com",

                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, "xxx@gmail.com", "IN:INBOX IS:UNREAD");
            }
            catch (Exception e)
            {
                Console.WriteLine("An error occurred: " + e.Message);
            }
        }
        catch (Exception ex)
        {

        }       

回答1:


You can use the ListMessages method from the API example (included for completeness) for searching:

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

You can use this search method to find unread messages, for example like this:

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

The q parameter (query) can be all kinds of stuff (it is the same as the gmail search bar on the top of the web interface), as documented here: https://support.google.com/mail/answer/7190?hl=en.

Note that you only a few parameters of the Message objects are set. If you want to retreive the messages you'll have to use 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;
  }

I agree that the API is not straight forward and misses a lot of functionality.




回答2:


Just do: labels.get(id="INBOX") and it has those types of stats (how many messages in that label, how many are unread, and same for threads).

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




回答3:


Solution for .Net:

    // Get UNREAD messages
    public void getUnreadEmails(GmailService service)
    {            
        UsersResource.MessagesResource.ListRequest Req_messages = service.Users.Messages.List("me");            
        // Filter by labels
        Req_messages.LabelIds = new List<String>() { "INBOX", "UNREAD" };            
        // Get message list
        IList<Message> messages = Req_messages.Execute().Messages;
        if ((messages != null) && (messages.Count > 0))
        {
            foreach (Message List_msg in messages)
            {
                // Get message content
                UsersResource.MessagesResource.GetRequest MsgReq = service.Users.Messages.Get("me", List_msg.Id);
                Message msg = MsgReq.Execute();
                Console.WriteLine(msg.Snippet);
                Console.WriteLine("----------------------");
            }
        }

        Console.Read();
    }


来源:https://stackoverflow.com/questions/29684077/get-unread-emails-from-google-api

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!