gpt4 book ai didi

c# - 使用 MS Graph API C# 读取用户电子邮件

转载 作者:行者123 更新时间:2023-12-04 12:43:21 26 4
gpt4 key购买 nike

我正在尝试使用 MS Graph API 从特定邮箱读取电子邮件。

var client = await GetClient(); //getting a client with client id, secret
var users = await client.Users.Request()
.Filter("startswith(displayName,'roger')")
.GetAsync(); //getting the users matching a criteria

var user = users.First(); //get the first user

//log the user name, this works fine
log.LogInformation("Found user " + user.DisplayName);

//this is null
var messages = user.MailFolders?.FirstOrDefault();

我从这里获取的用户那里获得了所有正确的数据,但用户 mailFolders属性是 null .

为什么是这样?

我们希望扫描特定邮箱中的电子邮件并处理这些电子邮件和附件。我认为这可能是做到这一点的正确方法。
但我坚持上述内容,MS Graph 的文档,尤其是 .NET API 的文档是如此。

是不是权限的事情,能不能把我们AD申请注册的权限提高一下来获得这个权限?

或者这里还有其他事情吗?

最佳答案

Graph Client 只是 REST API 的包装器,它不会延迟加载对象。
User对象来自 AAD 而 MailFolders来自 Exchange 并且每个都是自己的端点。

正如您所指出的,您是 Users请求工作正常。为了检索用户的MailFolders你需要拿IdUserPrincipalName来自 User并使用它向 MailFolders 发出单独的请求.您还需要发出另一个请求来获取消息:

// Get all users with a displayName of roger*
var users = await graphClient
.Users
.Request()
.Filter("startswith(displayName,'roger')")
.GetAsync();

// Get the first user's mail folders
var mailFolders = await graphClient
.Users[users[0].Id] // first user's id
.MailFolders
.Request()
.GetAsync();

// Get messages from the first mail folder
var messages = await graphClient
.Users[users[0].Id] // first user'd id
.MailFolders[mailFolders[0].Id] // first mail folder's id
.Messages
.Request()
.GetAsync();

如果您只关心“众所周知”的邮件文件夹,您可以使用 well-known name 来简化此请求。 .例如,您可以请求 inbox像这样:
// Get message from the user's inbox
var inboxMessages = await graphClient
.Users[users[0].Id] // first user'd id
.MailFolders["inbox"]
.Messages
.Request()
.GetAsync();

鉴于您只使用 id值,您可以通过仅请求 id 来优化它属性(property):
// Get all users with a displayName of roger*
var users = await graphClient
.Users
.Request()
.Select("id") // only get the id
.Filter("startswith(displayName,'roger')")
.GetAsync();

// Get the first user's mail folders
var mailFolders = await graphClient
.Users[users[0].Id] // first user's id
.MailFolders
.Request()
.Select("id") // only get the id
.GetAsync();

关于c# - 使用 MS Graph API C# 读取用户电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55311762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com