如何使用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
相关产品推荐
相关产品推荐

