Marina
Marina

Reputation: 45

How do I get the count of messages in the mailbox?

I have the problem with counting the messages of mailbox. I use c# and Microsoft.Graph 1.18.0

Here is my code

 public async Task<long> GetItemsCountAsync(string userId)
        {
            var countOption = new QueryOption("$count", "true");

            var request = ServiceClient.Value.Users[userId].Messages.Request();
            request.QueryOptions.Add(countOption);
            var resultMessages = new List<Message>();
            var count = 0L;

            do
            {
                var messagesResult = await request.GetAsync();

                if (messagesResult.AdditionalData != null && messagesResult.AdditionalData.TryGetValue("@odata.count", out var messagesCount))
                {
                    count = (long)messagesCount;
                }

                resultMessages.AddRange(messagesResult);
                request = messagesResult.NextPageRequest;
            }
            while (request != null);

            return count;
        }

And I have at the end count = 1417 and resultMessages.Count = 760

Did I miss something?

Thank you for any help!

Upvotes: 1

Views: 2138

Answers (1)

Vadim Gremyachev
Vadim Gremyachev

Reputation: 59388

Everything is fine with the provided example. It appears $count for List messages endpoint could not be trusted here since API does not return accurate count for messages from a specified search folder (refer, for example, this answer for a more details).

To get messages count List mailFolders endpoint could be utilized instead:

GET /users/{id | userPrincipalName}/mailFolders?$select=totalItemCount

where totalItemCount represents the number of items in the mail folder.

C# example

var folders = await graphClient.Users[userId].MailFolders.Request().Select(f =>f.TotalItemCount).GetAsync();
var totalMessagesCount = folders.Sum(folder => folder.TotalItemCount);

Upvotes: 5

Related Questions