c# - 使用 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
房产有关?有没有办法只请求文件附件的名称,而不下载这些附件?有没有办法为附件文件名指定全局模式过滤器?
所有这些都与我最初陈述的意图有关。同样,代码示例将是完美的。
解决方案
您不能进行 2 级扩展,因为它已在本文档中指定。要获取您需要使用的父文件夹的 displayName
GET https://graph.microsoft.com/v1.0/me/mailFolders/{Parentid}
您可以在文档中找到基本示例。这是一个示例应用程序,我们可以从其中开始并集成消息、人员和其他 API。
您还可以使用Graph Explorer来测试调用,还可以查看代码片段选项卡并根据您的语言获取 SDK 代码。
推荐阅读
- android - 进入DFU模式问题(固件更新Nordic Android)
- r - 传单更改集群标记颜色
- flutter - 如何在颤动中使用富文本实现对齐中心
- python - Python 2 到 Python 3 的转换:在 pyz 中找不到 __main__ 模块
- c# - 如何显示列表
在数据表中水平? - eclipse - 我可以阻止 STM32CubeIDE (Eclipse) 自动将文件添加到项目吗?
- javascript - 从文件加载人脸时face-js不匹配
- qt - 设置内容方向会改变弹出窗口出现时的变暗效果
- python - 在不同的文件上调用 Tkinter GUI 框架类
- sql-server - 如何在 SQL Server 中添加分数?