如何使用Microsoft Graph API实现Office365邮件撤回功能?
Microsoft Graph API 邮件撤回实现方案
Microsoft Graph 确实提供了邮件撤回的官方接口,对应messages资源的cancelSend动作,专门用于撤回Exchange Online(Office365)环境中已发送但未被收件人读取的邮件。
核心实现步骤
- 获取目标邮件ID:通过你已有的邮件查询接口(如
/me/messages)获取需要撤回的邮件唯一ID。 - 调用撤回接口:发送POST请求到以下端点:
- 委托权限(当前用户上下文):
https://graph.microsoft.com/v1.0/me/messages/{message-id}/cancelSend - 应用权限(跨用户操作):
https://graph.microsoft.com/v1.0/users/{user-id}/messages/{message-id}/cancelSend
- 委托权限(当前用户上下文):
- 权限要求:必须拥有
Mail.ReadWrite权限(委托权限需用户授权,应用权限需管理员同意)。
示例代码
cURL 请求示例
curl --request POST \ --url https://graph.microsoft.com/v1.0/me/messages/{your-message-id}/cancelSend \ --header 'Authorization: Bearer {your-access-token}'
C# 示例(使用Microsoft Graph SDK)
using Microsoft.Graph; using Azure.Identity; var scopes = new[] { "Mail.ReadWrite" }; var clientId = "your-client-id"; var tenantId = "your-tenant-id"; var clientSecret = "your-client-secret"; var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var graphClient = new GraphServiceClient(credential, scopes); try { await graphClient.Me.Messages["{your-message-id}"] .CancelSend() .Request() .PostAsync(); Console.WriteLine("邮件撤回请求已提交"); } catch (ServiceException ex) { Console.WriteLine($"撤回失败: {ex.Message}"); }
关键注意事项
- 撤回成功率限制:仅能撤回收件人未读取的邮件,若邮件已被读取、转发或移动,撤回操作会失败。
- 状态查询:撤回请求提交后(返回202 Accepted),可通过查询邮件的
cancelSendStatus属性查看最终状态,可选值包括Pending(处理中)、Success(成功)、Failed(失败)。 - 环境限制:该接口仅支持Exchange Online(Office365),本地Exchange Server环境无法通过此API实现撤回。
内容的提问来源于stack exchange,提问作者Sandeep Bhutani
相关产品推荐
相关产品推荐

