使用 Microsoft.Graph API 检索 ItemAttachment

A. *_*ank 5 c# microsoft-graph-api

我编写了一个程序,它成功地使用 Graph API 检查邮箱并检索消息。如果消息包含标准附件(例如 PDF、Word 文档),则代码可以正常工作。我可以在调试中看到这些被视为“FileAttachment”类型。但是,如果消息包含另一封电子邮件的附件,或者是语音邮件消息的 .wav 文件(这对我来说似乎很奇怪),那么程序就会阻塞,因为这些附件是类型的ItemAttachment并且转换失败。相关代码是这样的:

var msgTask = GraphClient.Me.MailFolders.Inbox.Messages.Request().Filter(filter).Expand("attachments").GetAsync();
IMailFolderMessagesCollectionPage messages = msgTask.Result;
foreach (Message msg in messages)
{
    // ...  
    foreach (Attachment att in msg.Attachments)
    {
        FileAttachment attachment = (FileAttachment)att;
        MsgFile.Attachments.Add(new System.IO.MemoryStream(attachment.ContentBytes), attachment.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经进行了一些搜索,并且正在查找使用 REST 来获取与 关联的数据的文档ItemAttachment,但我没有使用 REST,至少没有直接使用。这是一个 Windows 命令行应用程序,我使用 NuGet 下载了Microsoft.GraphMicrosoft.Graph.Core软件包。这些是我在代码中其他任何地方使用的库,用于验证和访问 Office 365 数据。

因此,我想知道是否有人对如何使用这些库访问和下载 ItemAttachment 对象有任何见解。谷歌搜索有关 Graph API 的信息几乎总是与 REST 有关。我找到了一些使用这些库的示例代码,但没有一个涉及 ItemAttachments。

Vad*_*hev 3

可以像这样请求附加到消息的项目(文档):

var attachmentRequest = graphClient.Me.MailFolders.Inbox.Messages[message.Id]
                                .Attachments[attachment.Id].Request().Expand("microsoft.graph.itemattachment/item").GetAsync();
var itemAttachment = (ItemAttachment)attachmentRequest.Result;
var itemMessage = (Message) itemAttachment.Item;  //get attached message
Console.WriteLine(itemMessage.Body);  //print message body
Run Code Online (Sandbox Code Playgroud)

例子

演示如何获取附件并将​​其保存到文件(如果附件是文件)以及如何读取附加消息(如果附件是项目):

var request = graphClient.Me.MailFolders.Inbox.Messages.Request().Expand("attachments").GetAsync();
var messages = request.Result;
foreach (var message in messages)
{
     foreach(var attachment in message.Attachments)
     {
          if (attachment.ODataType == "#microsoft.graph.itemAttachment")
          {

              var attachmentRequest = graphClient.Me.MailFolders.Inbox.Messages[message.Id]
                            .Attachments[attachment.Id].Request().Expand("microsoft.graph.itemattachment/item").GetAsync();
              var itemAttachment = (ItemAttachment)attachmentRequest.Result;
              var itemMessage = (Message) itemAttachment.Item;  //get attached message
              //...
          }
          else
          {
               var fileAttachment = (FileAttachment)attachment;
               System.IO.File.WriteAllBytes(System.IO.Path.Combine(downloadPath,fileAttachment.Name), fileAttachment.ContentBytes);
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

  • 这非常有帮助,但现在我发现“itemAttachment.Item”本身有一个我无法访问的附件。我可以看到“HasAttachments”属性为 true,但“Attachments”集合为 null。该 Message 对象的“ID”属性是一个空字符串。显然我需要对此项目执行“.Expand()”,但我不知道如何操作。我可以使用“WebLink”属性吗? (4认同)