C# 使用Microsoft Graph C下载.eml文件#

C# 使用Microsoft Graph C下载.eml文件#,c#,graph,microsoft-graph-api,microsoft-graph-mail,C#,Graph,Microsoft Graph Api,Microsoft Graph Mail,我对Microsoft Graph有一些问题。我想下载特定电子邮件中的附件。我已验证在此之后返回的对象类型: var attachments = graphClient.Me.Messages[msg.Id].Attachments.Request().GetAsync().Result; foreach(var item in attachments) { var current_attachment = graphClient.Me.Messages[msg.Id].A

我对Microsoft Graph有一些问题。我想下载特定电子邮件中的附件。我已验证在此之后返回的对象类型:

 var attachments = graphClient.Me.Messages[msg.Id].Attachments.Request().GetAsync().Result;
 foreach(var item in attachments) {
         var current_attachment = graphClient.Me.Messages[msg.Id].Attachments[item.Id].Request().GetAsync().Result;
}
是附件类型的对象。 现在,我想下载这个对象(当前的_附件),但是我看到ContentBytes属性不可用。 我尝试将对象强制转换为FileAttachment,但它引发了一个异常


谢谢。

这应该很简单。具体而言:

即使Outlook不以MIME格式保存邮件,也有 有两种方法可以获取MIME格式的Outlook邮件正文:

您可以将$value段附加到该段上的get消息操作 消息如果邮件附加到Outlook项目或组帖子, 您可以将$value段附加到该段上的get attachment操作 项目或组帖子。无论哪种情况,您的应用程序都必须具有相应的 访问Outlook项目或组帖子以应用的权限 获取消息或获取附件操作

然后,您可以将邮件正文内容保存在.EML文件中并附加 在业务系统(如CRM、ERP、, 和bug跟踪

以下是一个例子:

获取已登录用户邮箱中邮件的MIME内容

GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var stream = await graphClient.Me.Messages["4aade2547798441eab5188a7a2436bc1"].Content
  .Request()
  .GetAsync();
您可以像这样将“流”写入磁盘文件:

string path = @"\my\path\myfile.eml";
using(FileStream outputFileStream = new FileStream(path, FileMode.Create)) 
{  
    stream.CopyTo(outputFileStream);  
}  

生成的.eml文件将是完整的电子邮件,包括所有附件。

我可以访问附件,但我想将其下载到本地驱动器。在使用Graph之前,我使用以下代码下载附件:if(attachment.GetType()==typeof(FileAttachment)){var item=(FileAttachment)attachment;//从attachment System.IO.File.writealBytes(di.FullName+“\\”+item.Name,item.ContentBytes)强制转换;}但是现在,附件类型为ItemAttachment,因此不包含ContentBytes属性。我如何使用System.IO.File.WriteAllBytes来使用这种新类型的附件写入附件的字节?您的主题行问“Q:我如何使用Microsoft Graph C#下载.eml文件?”我引用的代码正是这样做的:它为您提供了一个流;您可以将流写入.eml文件。该文件将是完整的电子邮件,包括所有附件。非常感谢!