如何使用MS Graph Beta API撤回已发送邮件?接口与SDK问题排查
问题解答
1. 成功调用MS Graph邮件撤回API的方法
你遇到的Empty Payload. JSON content expected错误,是因为实际API要求传入空JSON对象作为请求负载(尽管官方文档示例未明确展示)。在Graph Explorer中调整请求即可解决:
- 保持请求URL不变:
https://graph.microsoft.com/beta/me/mailFolders/sentitems/messages/{message-id}/recall - 在请求体中输入
{}(空JSON对象) - 确保请求头的
Content-Type设置为application/json
同时需满足邮件撤回的核心限制:
- 仅能撤回发送至同一组织内收件人的邮件
- 收件人尚未读取该邮件
- 目标邮件必须保存在「已发送邮件」文件夹中
2. 使用.NET版MS Graph Beta SDK发送撤回请求
5.86.0版本的Beta SDK尚未将recall方法纳入强类型API,可通过自定义请求实现调用,示例代码如下:
方式一:利用SDK的Request扩展
var graphServiceClient = GetGraphServiceClient_Beta(); var messageId = "目标邮件ID"; var userId = userinfo.UserPrincipalName; // 构建撤回请求的相对路径 var requestPath = $"users/{userId}/mailFolders/sentitems/messages/{messageId}/recall"; // 发送POST请求,传入空对象作为请求体(会被序列化为{}) var result = await graphServiceClient .Request(requestPath) .PostAsync(new object());
方式二:直接构造HTTP请求
var graphServiceClient = GetGraphServiceClient_Beta(); var messageId = "目标邮件ID"; var userId = userinfo.UserPrincipalName; var requestUrl = $"https://graph.microsoft.com/beta/users/{userId}/mailFolders/sentitems/messages/{messageId}/recall"; var httpRequest = new HttpRequestMessage(HttpMethod.Post, requestUrl) { Content = new StringContent("{}", Encoding.UTF8, "application/json") }; var response = await graphServiceClient.HttpProvider.SendAsync(httpRequest); response.EnsureSuccessStatusCode(); // 自定义响应模型解析结果 var recallResult = await response.Content.ReadFromJsonAsync<RecallResponse>(); // 响应模型示例 public class RecallResponse { public bool Success { get; set; } public List<string> FailedRecipients { get; set; } }
注意:调用前需确保已获取Mail.ReadWrite权限范围。
内容的提问来源于stack exchange,提问作者John Park
相关产品推荐
相关产品推荐

