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

如何从Microsoft Graph API的SendMail操作直接获取已发送邮件ID?

如何通过Microsoft Graph API的SendMail操作直接获取已发送邮件的ID?

我在.NET应用中使用Microsoft Graph API发送邮件,当前代码如下:

await client.Users[model.From]
            .SendMail(message, true)
            .Request()
            .PostAsync(cancellationToken)
            .ConfigureAwait(false);

这段代码能成功发送邮件,但SendMail方法不会返回已发送邮件的直接信息,尤其是无法获取邮件ID,而我需要在应用中追踪该ID以备后续使用。

我曾尝试调用SendMail后从“Sent Items”文件夹获取最新邮件,但这种方式可靠性存疑:

var sentItems = await client.Users[model.From]
                            .MailFolders["SentItems"]
                            .Messages
                            .Request()
                            .Top(1)
                            .OrderBy("receivedDateTime desc")
                            .GetAsync();

string messageId = sentItems.CurrentPage.FirstOrDefault()?.Id;

我还考虑过手动设置邮件ID,但了解到该字段会被服务器忽略,由服务器自动分配。

请问是否存在其他方式可直接从SendMail操作中获取已发送邮件的ID?


解决方案

可以通过添加Prefer: return=representation请求头,让Microsoft Graph API在执行SendMail操作后返回已发送邮件的完整实体,从而直接获取邮件ID。

修改后的代码示例:

var request = client.Users[model.From]
                    .SendMail(message, true)
                    .Request();

// 添加请求头,要求返回已发送邮件的实体
request.Header("Prefer", "return=representation");

// 执行请求并获取返回的邮件对象
var sentMessage = await request.PostAsync(cancellationToken).ConfigureAwait(false);

// 直接获取邮件ID
string messageId = sentMessage.Id;

说明

  • Prefer: return=representation是Microsoft Graph API支持的请求头,用于指定操作完成后返回资源的完整表示,适用于包括SendMail在内的多个创建/修改类操作。
  • 这种方式避免了从“Sent Items”文件夹查询的潜在问题(比如并发场景下最新邮件可能不是刚发送的那封),是官方推荐的可靠方案。
  • 手动设置邮件ID确实会被服务器覆盖,无法通过这种方式自定义或提前获取ID。

内容的提问来源于stack exchange,提问作者Alireza Noori

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:37:00