我正在尝试读取组织中的传入邮件数量及其中的用户。我在控制台应用程序中尝试了以下代码。但在这一行 - var users = await graphServiceClient.Users.Request().GetAsync(); application stopes running.
那么,为什么会这样?(我尝试使用调试器但没有错误)
.WithAuthority 的格式对吗?
是否有任何替代方法来访问图形 api 令牌和读取整个组织中的传入邮件计数? 如果是,请帮我提供示例代码。
var confidentialClient = ConfidentialClientApplicationBuilder.Create(clientId).WithAuthority($"https://login.microsoftonline.com/$token/v2.0").WithClientSecret(clientSecret).Build(); GraphServiceClient graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(async (requestMessage) => { var authResult = await confidentialClient.AcquireTokenForClient(scopes).ExecuteAsync(); requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);})); var users = await graphServiceClient.Users.Request().GetAsync(); foreach (Microsoft.Graph.User item in users) { Console.WriteLine(item.DisplayName); } Console.WriteLine(users.Count);
谢谢!
在 Ms graph api 中,我们没有一个可以查询整个组织中所有电子邮件的 API,我们只有一个 list message API 用于获取特定用户的电子邮件。而组织中的一些用户想要获取其他用户的邮件,我们通常需要有应用程序API权限,在文档中提到:
一个app可以在另一个app中获取消息有两种情况 用户的邮件文件夹:
如果应用有应用权限,或者,如果应用有 来自一个用户的适当委派权限,并且另一个用户具有 与该用户共享邮件文件夹,或者已授予对 那个用户。查看详细信息和示例。
关于应用api权限,是2种权限之一。委托API权限是指用户需要登录才能获得授权,授权允许用户访问自己的资源。应用API权限是指应用在请求授权,这个授权允许应用访问租户中所有用户的所有资源。
对于这个API,我们需要有
Mail.ReadBasic.All, Mail.Read, Mail.ReadWrite
应用程序API权限。
然后我们可以使用这样的代码(基于最新的图形 SDK)来获取特定用户的电子邮件计数:
using Microsoft.Graph;
using Azure.Identity;
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "tenant_name.onmicrosoft.com";
var clientId = "aad_app_id";
var clientSecret = "client_secret";
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var result = await graphClient.Users["{user-id}"].Messages.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Count = true;
});
然后使用循环添加消息总数。顺便说一句,
graphServiceClient.Users.Request().GetAsync();
会返回租户中的所有用户,但我认为不是每个用户都有邮件许可证。
Ms Graph API只能访问租户中的资源,比如你邀请我的账号进入你的租户,我的账号是我的outlook邮箱([email protected]),我在这个邮箱里有很多邮箱,但是你无法通过 API 获取任何电子邮件信息。
那是因为当你邀请我的账号进入你的租户时,我的账号会有一个类似
tiny_outlook.com#EXT#@yourTenantName.onmicrosoft.com
的原则,你还需要为这个原则添加一个license(比如M365 E3 license会提供email功能),然后API可以根据这个原理查询邮件。如果您不分配此类许可证,则该原则将没有电子邮件地址,因此不会有任何有关该原则的电子邮件。