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

使用Graph API通过MIME内容创建Office 365草稿邮件,无法获取草稿ID

通过Graph API用MIME内容创建草稿并获取ID的正确方法

你当前做法的问题

手动修改HttpRequestMessage的思路可行,但缺了两个关键环节:

  1. 没设置正确的Content-Type请求头——Graph API要求MIME内容的请求头必须是message/rfc822
  2. 发送请求后没解析响应体——新建草稿的ID就在响应的JSON数据里,不解析根本拿不到

正确实现方式

方式1:用Graph SDK原生方法(推荐)

没必要手动改请求,SDK本身就支持直接传入MIME内容创建草稿:

// 准备MIME内容,转成Base64格式
var mimeContentString = "你的MIME格式邮件内容";
var base64Mime = Convert.ToBase64String(Encoding.UTF8.GetBytes(mimeContentString));

// 调用SDK方法创建草稿
var draftMessage = await graphClient.Users[sendFrom].Messages
    .Request()
    .AddAsync(new Message
    {
        MimeContent = new MimeContent
        {
            Type = "message/rfc822",
            Content = base64Mime
        }
    });

// 直接获取草稿ID
var draftId = draftMessage.Id;

方式2:手动处理HTTP请求(如果非要用这种方式)

如果坚持手动修改请求,必须补充请求头并解析响应:

var draftMessagesRequest = graphClient
    .Users[sendFrom]
    .Messages
    .Request()
    .GetHttpRequestMessage();

// 设置POST方法和正确的Content-Type头
draftMessagesRequest.Method = HttpMethod.Post;
draftMessagesRequest.Content = content;
draftMessagesRequest.Content.Headers.ContentType = new MediaTypeHeaderValue("message/rfc822");

var draftMessageResponse = await graphClient.HttpProvider.SendAsync(draftMessagesRequest);

// 解析响应体拿到ID
if (draftMessageResponse.IsSuccessStatusCode)
{
    var responseJson = await draftMessageResponse.Content.ReadAsStringAsync();
    var draftMessage = JsonConvert.DeserializeObject<Message>(responseJson);
    var draftId = draftMessage.Id;
}

注意事项

  • MIME内容必须符合RFC 822标准,格式错误会导致创建失败
  • 权限需要申请Mail.ReadWrite或Mail.Send,否则会返回权限不足的错误
  • 响应JSON里的ID字段是小写的id,用SDK的Message类反序列化时会自动映射到Id属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:36:16