首页 > 解决方案 > 使用 Graph SDK 获取 Outlook 电子邮件文件夹和电子邮件

问题描述

我想下载与 glob 模式匹配的文件夹层次结构中的所有电子邮件(和文件附件)。例如,我可以抓取与模式“inbox/jira/mentions”或“inbox/*/jira”匹配的文件夹中的所有电子邮件消息(带附件)。此外,我还可以根据文件名的通配符过滤附件,例如“*.docx”。

圣杯答案将导致服务器对文件夹以及附件名称执行全局匹配。但是,我怀疑我需要在本地做一些 globbing。

我不知道 OData 语法是否直接支持其中任何一个。如果是,我如何使用 Microsoft.Graph SDK 中提供的 SDK 来利用它?如果消息和附件都已作为该查询的一部分“扩展”,那将是理想的。

如果 SDK 不支持,那么从概念上讲,我认为我可以执行以下操作:仅执行 EmailFolder 查询,并将结果转换为字符串化的文件夹路径。将其存储为本地执行的全局匹配的“查找表”。然后将任何匹配的文件夹用作查询以获取相关消息(带有扩展附件)。至于基于文件名过滤附件,我不知道它的外观。

我没有上述任何内容的代码示例。我所拥有的是一个示例消息请求,它说明了 SDK 的使用:

messages = await graphClient.Users[user.UserPrincipalName].Messages.Request()
    .Filter("HasAttachments eq true")
    .Expand("Attachments")
    .Select(m => new
    {
        m.Id,
        m.From,
        m.ToRecipients,
        m.Subject,
        m.HasAttachments,
        m.CreatedDateTime,
        m.LastModifiedDateTime,
        m.ParentFolderId,
        m.Body
    })
    .Top(pageSize).GetAsync(cancellationToken);

使用此 SDK 的示例代码是我所要求的。我需要扩展我对这个 SDK 及其查询功能的理解。

上面的示例代码提出了许多问题。与上述不同,如果我从 MailFolders 开始我的请求根目录,那么同时请求“扩展”消息和附件的语法是什么?换句话说,使用 Expand 函数的两个层次的深度。否则,是否可以修改上述 Messages 请求以给出父文件夹的“显示名称”,而不仅仅是父文件夹的 ID?
如果有,是否与AdditionalData房产有关?有没有办法只请求文件附件的名称,而不下载这些附件?有没有办法为附件文件名指定全局模式过滤器?

所有这些都与我最初陈述的意图有关。同样,代码示例将是完美的。

标签: c#outlookmicrosoft-graph-apiodata

解决方案


您不能进行 2 级扩展,因为它已在本文档中指定。要获取您需要使用的父文件夹的 displayName

GET https://graph.microsoft.com/v1.0/me/mailFolders/{Parentid} 

您可以在文档中找到基本示例。这是一个示例应用程序,我们可以从其中开始并集成消息、人员和其他 API。

您还可以使用Graph Explorer来测试调用,还可以查看代码片段选项卡并根据您的语言获取 SDK 代码。


推荐阅读