如何通过MS Graph为Outlook邮件添加指定分类?
问题原因
你的代码存在两个核心问题导致分类没有成功添加:
- Outlook 邮件的
Categories属性是存储分类显示名称的字符串集合,不需要传入OutlookCategory实体对象,直接添加分类的名称字符串即可 - 你仅在本地修改了内存中的集合属性,没有调用更新接口将改动提交到 Graph API 服务端,改动不会同步到云端邮件
正确实现代码
原有创建 master 分类的逻辑无需调整,将添加分类到邮件的部分替换为如下代码即可:
// 先拉取邮件现有分类,避免覆盖用户原有分类 var targetMessage = await graphService.Users[metadata.UserOid].Messages[m.MailId] .Request() .Select("Categories") .GetAsync(); // 避免重复添加同一个分类 var targetCategoryName = category.DisplayName; if (!targetMessage.Categories.Contains(targetCategoryName)) { targetMessage.Categories.Add(targetCategoryName); // 提交修改到服务端 await graphService.Users[metadata.UserOid].Messages[m.MailId] .Request() .UpdateAsync(targetMessage); }
额外注意事项
- 确保你的应用已经申请了
Mail.ReadWrite相关权限,权限类型支持委托权限或应用程序权限 - 如果不需要保留原有分类、或者你已经在内存中持有完整的最新分类列表,可以直接构造补丁对象提交,减少一次查询请求:
var updateMessage = new Message { Categories = new List<string> { category.DisplayName } }; await graphService.Users[metadata.UserOid].Messages[m.MailId] .Request() .UpdateAsync(updateMessage);
内容的提问来源于stack exchange,提问作者greg-e
相关产品推荐
相关产品推荐

