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

如何使用MS-Graph和C#将邮件保存为EML文件到文件夹

用MS Graph和C#将邮件保存到Windows文件夹

1. 保存邮件为.eml格式

要把邮件保存成标准的.eml文件,你需要请求邮件的MIME内容(而非仅获取Message对象)。修改请求逻辑,获取邮件的Content流并写入本地文件:

// 异步获取邮件的MIME内容流
var mimeStream = await _graphServiceClient.Users[senderAddress]
    .MailFolders.Inbox
    .Messages[msgs[0].Id]
    .Content
    .Request()
    .GetAsync();

// 指定保存路径,确保文件夹存在
var savePath = @"C:\YourTargetFolder\saved_email.eml";
Directory.CreateDirectory(Path.GetDirectoryName(savePath));

// 将流写入文件
using (var fileStream = new FileStream(savePath, FileMode.Create))
{
    await mimeStream.CopyToAsync(fileStream);
}

2. 保存邮件附件

你已经通过Expand("attachments")获取了附件列表,接下来遍历附件并保存到指定文件夹:

// 确保附件保存目录存在
var attachmentsDir = @"C:\YourTargetFolder\Attachments";
Directory.CreateDirectory(attachmentsDir);

foreach (var attachment in firstEmail.Attachments)
{
    // 仅处理文件类型附件(跳过内嵌图片等非文件附件)
    if (attachment is FileAttachment fileAttachment)
    {
        var attachmentPath = Path.Combine(attachmentsDir, fileAttachment.Name);
        // 将Base64编码的内容字节写入文件
        File.WriteAllBytes(attachmentPath, fileAttachment.ContentBytes);
    }
}

注意事项

  • 替换代码中的C:\YourTargetFolder为实际保存路径,确保程序拥有该目录的读写权限
  • 建议用await替代.Result避免异步死锁,同时将方法标记为async
  • 若邮件包含大量或大体积附件,可考虑分块写入或添加进度监控

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:20:57