Reputation: 45
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
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