如何在Microsoft Graph API 5.18的C#代码中指定用户ID移动邮件?
使用Microsoft Graph API 5.18指定用户ID移动筛选后的邮件
核心API调用替换
直接把针对当前用户的.Me替换为Users[目标用户ID],就能定位到指定用户的邮件资源。比如原来的graphClient.Me.Messages改成graphClient.Users[archiveUserId].Messages,其中archiveUserId就是你要操作的用户ID(比如ArchiveUser.Id)。
请求体定义
移动邮件需要传入MovePostRequestBody对象,只需要指定目标文件夹的ID(DestinationId)即可,这个类是Graph SDK内置的,无需手动定义。
完整代码示例
以下是筛选指定用户的未读邮件并移动到目标文件夹的完整代码:
using Microsoft.Graph; using Microsoft.Graph.Models; // 初始化已授权的GraphClient(你已实现此部分) var graphClient = GetAuthenticatedGraphClient(); // 目标用户ID和目标文件夹ID string targetUserId = "ArchiveUser.Id"; // 替换为实际用户ID string targetFolderId = "目标文件夹的ID"; // 替换为实际文件夹ID try { // 筛选目标用户的未读邮件(可根据需求修改Filter条件) var messages = await graphClient.Users[targetUserId].Messages .GetAsync(requestConfig => { requestConfig.QueryParameters.Filter = "IsRead eq false"; requestConfig.QueryParameters.Select = new[] { "Id" }; // 只获取邮件ID,减少数据传输 }); if (messages?.Value != null && messages.Value.Any()) { foreach (var message in messages.Value) { // 构造移动请求体 var moveRequestBody = new MovePostRequestBody { DestinationId = targetFolderId }; // 执行移动操作 await graphClient.Users[targetUserId].Messages[message.Id] .Move.PostAsync(moveRequestBody); Console.WriteLine($"邮件 {message.Id} 已移动"); } } else { Console.WriteLine("没有符合条件的邮件"); } } catch (Exception ex) { Console.WriteLine($"移动邮件失败:{ex.Message}"); }
注意事项
- 确保当前授权用户拥有访问目标用户邮箱的权限(你的权限配置已覆盖,但实际场景中需确认用户间的访问权限)
- 筛选条件可根据需求自定义,比如按主题筛选:
"Subject contains '归档'",按收件时间筛选:"ReceivedDateTime ge 2024-01-01T00:00:00Z" - 如果需要批量移动大量邮件,建议分页获取邮件(添加
Top和Skip参数),避免单次请求数据量过大
内容的提问来源于stack exchange,提问作者Satu
相关产品推荐
相关产品推荐

