c# - 如何获取邮箱中的邮件数量?
问题描述
我在计算邮箱消息时遇到问题。我使用 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;
}
最后我有 count = 1417 和 resultMessages.Count = 760
我错过了什么?
感谢您的任何帮助!
解决方案
提供的示例一切都很好。此处似乎无法信任端点$count
,因为API 不会返回来自指定搜索文件夹的消息的准确计数(例如,有关更多详细信息,请参阅此答案)。 List messages
要获取消息计数List mailFolders
端点,可以改为使用:
GET /users/{id | userPrincipalName}/mailFolders?$select=totalItemCount
其中totalItemCount
表示邮件文件夹中的项目数。
C# 示例
var folders = await graphClient.Users[userId].MailFolders.Request().Select(f =>f.TotalItemCount).GetAsync();
var totalMessagesCount = folders.Sum(folder => folder.TotalItemCount);
推荐阅读
- graph - 如何获得 Rascal 上下文无关文法的强连通分量
- google-bigquery - Unix时间到日期时间谷歌bigquery?
- c - 使用 R 编辑二进制文件
- java - 如何在 Spring Boot 中记录对未知 URL 端点的请求?
- tensorflow - Dataset.map 可以以某种方式并行化 tf.py_func 调用吗?
- dictionary - 添加大于 n 过滤器的对
- sql - 如何从 SQL 查询中仅选择第二个结果
- java - 比较器:将 2 个对象与可以为空的字段进行比较
- python - 如何在分布式 Tensorflow 中并行化 python 输入管道
- javascript - Angular 1.6 - 使用状态从错误的 url 重定向到 404 页面