如何使用.NET版Graph SDK V5发送MIMECONTENT?求更优方案
更优方案:直接发送MIME内容(无需解析重构)
Graph API支持直接通过sendMail端点发送MIME格式的邮件,Graph SDK V5也原生支持这种方式——不需要借助MimeKit解析重构邮件内容,直接将.eml文件的字节数组作为MimeContent传入即可,一步完成发送,效率更高且能完整保留邮件原始信息。
代码示例
byte[] emlBytes = File.ReadAllBytes(filepath); var sendMailRequest = new Microsoft.Graph.Models.SendMailPostRequestBody { Message = new Microsoft.Graph.Models.Message { MimeContent = new Microsoft.Graph.Models.MimeContent { ContentType = "message/rfc822", Content = Convert.ToBase64String(emlBytes) } }, SaveToSentItems = true // 根据业务需求设置是否保存到已发送邮件文件夹 }; // 直接发送邮件,无需创建草稿或拆分操作 await gsc.Users[userinfo.UserPrincipalName].SendMail.PostAsync(sendMailRequest);
方案优势
- 简化代码与性能优化:省去MimeKit解析邮件的额外开销,减少代码层级与出错概率
- 一步完成发送:无需分「创建草稿→逐个添加附件→触发发送」多步操作,一次API请求完成全部流程
- 完整保留原始属性:.eml文件中的抄送、密送、自定义邮件头、特殊格式等信息都会被完整保留,不会因解析重构丢失数据
使用ToPostRequestInformation的自定义请求方式
如果需要更灵活地控制请求细节(比如自定义请求头),可以用ToPostRequestInformation手动构建请求,直接发送原始MIME数据:
byte[] emlBytes = File.ReadAllBytes(filepath); // 构建基础请求信息 var requestInfo = gsc.Users[userinfo.UserPrincipalName].SendMail.ToPostRequestInformation(new SendMailPostRequestBody()); // 覆盖请求内容类型与原始MIME数据 requestInfo.ContentType = "message/rfc822"; requestInfo.Content = emlBytes; // 发送自定义请求 await gsc.RequestAdapter.SendAsync(requestInfo, typeof(void));
这种方式仅适合需要高度自定义请求的场景,日常使用中第一种方案更简洁高效。
内容的提问来源于stack exchange,提问作者John Park
相关产品推荐
相关产品推荐

