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

从EWS迁移至Graph API:如何获取ItemAttachment的MimeContent并保存为eml?

从EWS迁移到Graph API:获取ItemAttachment的MimeContent并导出为EML文件

核心问题说明

Graph SDK中无法直接通过ItemAttachment.Item获取MimeContent,需要通过特定接口或手动转换来实现EWS中导出EML的功能,以下是两种可行方案:


方法一:直接获取ItemAttachment的原始MIME内容(推荐)

Graph API支持直接请求附件的原始内容流,对应EWS中获取MimeContent.Content的逻辑,步骤如下:

  • 调用Graph API的/me/messages/{messageId}/attachments/{attachmentId}/$value端点,获取的流即为完整的EML格式内容
  • C# Graph SDK代码示例:
// 替换为实际的messageId和attachmentId
var attachmentStream = await graphClient.Me.Messages["{messageId}"].Attachments["{attachmentId}"]
    .Content
    .Request()
    .GetAsync();

// 将流写入本地EML文件
using var fileStream = new FileStream("attachment.eml", FileMode.Create);
await attachmentStream.CopyToAsync(fileStream);
  • 注意:仅当ItemAttachment的ContentType为message/rfc822时,此接口返回的内容可直接保存为EML文件。

方法二:从OutlookItem手动构建EML内容(备选)

如果已获取OutlookItem对象(如转换为Message类型),可借助MimeKit库手动映射邮件属性生成EML:

  • 先安装MimeKit包:Install-Package MimeKit
  • C#代码示例:
// 假设已将ItemAttachment.Item转换为Message对象
var outlookMsg = (Message)itemAttachment.Item;
var mimeMsg = new MimeMessage();

// 填充邮件头部信息
mimeMsg.From.Add(new MailboxAddress(outlookMsg.From.EmailAddress.Name, outlookMsg.From.EmailAddress.Address));
mimeMsg.To.AddRange(outlookMsg.ToRecipients.Select(r => new MailboxAddress(r.EmailAddress.Name, r.EmailAddress.Address)));
if (outlookMsg.CcRecipients != null)
    mimeMsg.Cc.AddRange(outlookMsg.CcRecipients.Select(r => new MailboxAddress(r.EmailAddress.Name, r.EmailAddress.Address)));
mimeMsg.Subject = outlookMsg.Subject;
mimeMsg.Date = outlookMsg.ReceivedDateTime ?? DateTimeOffset.Now;

// 处理邮件正文
var bodyBuilder = new BodyBuilder();
if (outlookMsg.Body.ContentType == BodyType.Html)
    bodyBuilder.HtmlBody = outlookMsg.Body.Content;
else
    bodyBuilder.TextBody = outlookMsg.Body.Content;
mimeMsg.Body = bodyBuilder.ToMessageBody();

// 保存为EML文件
using var fileStream = new FileStream("exported.eml", FileMode.Create);
await mimeMsg.WriteToAsync(fileStream);
  • 此方法需要自行处理邮件的所有属性(包括密送、附件、邮件头等),适合无法调用Content接口的场景,但实现成本高于方法一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:02:14