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

如何通过Microsoft Graph SDK获取邮件的文本与HTML内容

解决方案:单次请求获取邮件的Text和HTML正文

问题核心

需要在Microsoft Graph中单次请求同时获取邮件的text/plain和html格式正文,避免发起两次请求的冗余操作。

纠正错误代码

ChatGPT提供的代码不符合Microsoft Graph API的实际结构:Message.Body是单个ItemBody对象,而非集合,因此无法遍历message.Body.Content。

正确实现方式

通过设置Prefer请求头为outlook.body-content-type='text; html',可在单次请求中同时获取两种格式的正文内容,Graph API会在响应中返回TextBody和HtmlBody两个属性。

以下是完整的初始化与请求代码示例(以C# Graph SDK为例):

// 初始化Graph客户端(委托权限模式,交互式认证)
var scopes = new[] { "Mail.Read" };
var clientId = "你的客户端ID";
var tenantId = "你的租户ID";

var credentialOptions = new InteractiveBrowserCredentialOptions
{
    ClientId = clientId,
    TenantId = tenantId,
    RedirectUri = new Uri("http://localhost"),
};

var credential = new InteractiveBrowserCredential(credentialOptions);
var graphClient = new GraphServiceClient(credential, scopes);

// 构建请求,添加Prefer头并指定返回字段
var requestHeaders = new Dictionary<string, string>
{
    { "Prefer", "outlook.body-content-type='text; html'" }
};

var targetMessage = await graphClient.Me.Messages["目标邮件ID"]
    .Request(requestHeaders)
    .Select(msg => new { msg.Id, msg.Subject, msg.TextBody, msg.HtmlBody })
    .GetAsync();

// 提取正文内容
var plainTextContent = targetMessage.TextBody?.Content;
var htmlContent = targetMessage.HtmlBody?.Content;

关键说明

  1. 权限配置:确保你的应用已申请Mail.Read权限(委托或应用权限均可,根据场景选择)
  2. 请求头作用:Prefer头告知Graph API同时返回两种格式的正文,无需拆分两次请求
  3. 字段选择:使用Select方法指定仅返回需要的字段,减少响应体积

替代方案(直接调用REST API)

如果不使用SDK,可直接发送HTTP请求:

GET https://graph.microsoft.com/v1.0/me/messages/{message-id}?$select=id,subject,textBody,htmlBody
Prefer: outlook.body-content-type='text; html'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:52:52