如何获取邮箱中的邮件数量?

Mar*_*ina 1 c# microsoft-graph-api

我在计算邮箱消息数时遇到问题。我使用 c# 和 Microsoft.Graph 1.18.0

这是我的代码

 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;
        }
Run Code Online (Sandbox Code Playgroud)

我最终有 count = 1417 和 resultMessages.Count = 760

我错过了什么?

感谢您的任何帮助!

Vad*_*hev 5

所提供的示例一切都很好。$count此处List messages端点似乎不受信任,因为 API 不会返回来自指定搜索文件夹的消息的准确计数(例如,请参阅此答案以获取更多详细信息)。

要获取消息计数,List mailFolders可以使用端点:

GET /users/{id | userPrincipalName}/mailFolders?$select=totalItemCount
Run Code Online (Sandbox Code Playgroud)

其中totalItemCount代表邮件文件夹中的项目数。

C# 示例

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