You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 08:55:15