如何使用C#通过Graph API在共享邮箱文件夹间移动邮件及操作Message对象
使用C#通过Graph API移动共享邮箱中的邮件
前提条件
- 已初始化并授权的
GraphServiceClient实例(权限需包含Mail.ReadWrite.Shared或等效权限) - 已获取目标共享邮箱的邮箱地址(或ID)
- 已获取目标文件夹的ID(可通过Graph API查询共享邮箱的文件夹列表得到)
- 已持有要移动的
Microsoft.Graph.Models.Message对象
实现代码
直接利用已有的Message对象,结合共享邮箱标识调用Move接口即可完成操作:
// 假设已提前准备好以下变量 // GraphServiceClient graphClient = ...; // 已完成授权的客户端实例 // Message targetMessage = ...; // 需要移动的邮件对象 // string sharedMailboxAddress = "shared@yourdomain.com"; // 共享邮箱地址 // string targetFolderId = "AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgAuAAADsVyfxjDU406Ic4X7illHggEAxMP7hX1kEuqR5tFw4soPnQAAAIBDQAAAA=="; // 目标文件夹ID // 发起移动请求 await graphClient .Users[sharedMailboxAddress] .Messages[targetMessage.Id] .Move .PostAsync(new Microsoft.Graph.Messages.Item.Move.MovePostRequestBody { DestinationId = targetFolderId });
关键注意事项
- 权限验证:应用权限需配置
Mail.ReadWrite.Shared,委派权限需确保用户拥有共享邮箱的读写访问权限 - 目标范围:只能将邮件移动到同一共享邮箱内的文件夹,跨邮箱移动需采用「复制+删除」的组合操作
- 异常处理:如果邮件已被删除/移动,会返回404错误;权限不足则返回403,建议添加异常捕获逻辑:
try { await graphClient .Users[sharedMailboxAddress] .Messages[targetMessage.Id] .Move .PostAsync(new Microsoft.Graph.Messages.Item.Move.MovePostRequestBody { DestinationId = targetFolderId }); Console.WriteLine("邮件移动成功"); } catch (ServiceException ex) { Console.WriteLine($"移动失败: {ex.Message}"); // 根据ErrorCode做针对性处理,例如404=邮件不存在,403=权限不足等 }
内容的提问来源于stack exchange,提问作者Akila
相关产品推荐
相关产品推荐

