我在计算邮箱消息数时遇到问题。我使用 c# 和 Microsoft.Graph 1.18.0
这是我的代码
public async Task<long> GetItemsCountAsync(string userId)
{
var countOption = new QueryOption("$count", "true");
var request = ServiceClient.Value.Users[userId].Messages.Request();
request.QueryOptions.Add(countOption);
var resultMessages = new List<Message>();
var count = 0L;
do
{
var messagesResult = await request.GetAsync();
if (messagesResult.AdditionalData != null && messagesResult.AdditionalData.TryGetValue("@odata.count", out var messagesCount))
{
count = (long)messagesCount;
}
resultMessages.AddRange(messagesResult);
request = messagesResult.NextPageRequest;
}
while (request != null);
return count;
}
Run Code Online (Sandbox Code Playgroud)
我最终有 count = 1417 和 resultMessages.Count = 760
我错过了什么?
感谢您的任何帮助!
最近微软宣布可以发送附件大于4MB的电子邮件。根据文档,我们必须创建草稿,然后上传会话,上传附件,最后发送邮件。
我可以使用以下代码创建草稿:
var confidentialClientApplication = ConfidentialClientApplicationBuilder
.Create(clientId)
.WithClientSecret(clientSecret)
.WithTenantId(tenant)
.Build();
var authenticationProvider = new ClientCredentialProvider(confidentialClientApplication);
var graphClient = new GraphServiceClient(authenticationProvider);
var email = new Message
{
Body = new ItemBody
{
Content = i + " Works fine! " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
ContentType = BodyType.Html,
},
Subject = "Test" + (j == 0 ? "" : " " + j),
ToRecipients = recipientList,
Attachments = att
};
Message draft = await graphClient
.Users["test@test.onmicrosoft.com"]
.Messages
.Request()
.AddAsync(mail);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试文档中的片段时:
var …Run Code Online (Sandbox Code Playgroud) c# microsoft-graph-sdks microsoft-graph-mail microsoft-graph-api
我正在尝试在 Azure AD 中创建订阅,以便在删除用户时接收通知。但我收到 400 响应代码和一条消息“Azure Active Directory 工作负载未启用丰富通知”。我不知道原因。我需要做什么 ?!
这是我的要求:
{
"changeType": "deleted",
"notificationUrl": "https://95bb3cee58yb.ngrok.io/azure/notifications",
"resource": "users",
"includeResourceData": true,
"expirationDateTime": "2020-09-30T10:27:03.4541718Z",
"clientState": "secretClientValue",
"latestSupportedTlsVersion": "v1_2"
}Run Code Online (Sandbox Code Playgroud)
这是回应:
{
"error": {
"code": "InvalidRequest",
"message": "Azure Active Directory workload is not enabled for rich notifications.",
"innerError": {
"date": "2020-09-28T13:05:26",
"request-id": "ba715410-16a2-480f-840b-e72e863c4a05",
"client-request-id": "577c315b-8715-753c-4efd-68a4729b92c2"
}
}
}Run Code Online (Sandbox Code Playgroud)
我通过 microsoft graph api 在 microsoft planner 中创建了任务。我无法检索任务的优先级。应该研究哪个领域?
我正在尝试将我的应用程序从 Office 365 REST v2.0 迁移到 Microsoft Graph (v1.0)。令牌交换似乎正常工作,但当我尝试调用 API 时,我收到以下错误:
(
[errorNumber] => 401
[error] => Request returned HTTP error 401
[message] => {
"error": {
"code": "InvalidAuthenticationToken",
"message": "Access token validation failure. Invalid audience.",
"innerError": {
"date": "2021-03-16T15:36:21",
"request-id": "dda1e33a-2774-4986-8c45-1487404fbb72",
"client-request-id": "e842d9a8-d71b-0563-f1ce-e58052e5bdb9"
}
}
}
)
Run Code Online (Sandbox Code Playgroud)
access_token 具有以下受众:
"aud": "https://outlook.office.com"
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的端点:
https://login.microsoftonline.com/common/oauth2/v2.0/token
Run Code Online (Sandbox Code Playgroud)
有效负载:
grant_type=authorization_code
&code=0.AR8A3XwQy0FAmkSxxxx
&redirect_uri=https%3A%2F%2Fxxx.com%2Fproxy%2Foffice365authorize
&client_id=e2147faf-87f0-4e7f-xxxx-xxxxxxxxxxx
&client_secret=xxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)
任何提示将不胜感激,谢谢!
在我的 C# 应用程序中,我尝试通过 Graph API 搜索用户。我唯一的参数是存储在 onPremisesSamAccountName 字段中的用户名。
通过 Graph Explorer 我可以成功运行查询
Graph Explorer 为我提供了要使用的 C# 代码
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var users = await graphClient.Users
.Request()
.Search("onPremisesSamAccountName:myusername")
.Select("id,displayName")
.GetAsync();
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试使用该代码时,我收到一条错误消息,指出“搜索不是一种方法”,我是否需要添加额外的包才能使用“搜索”?
我正在使用 Microsoft Graph api 在 Spring Boot 应用程序中发送和接收邮件,
我使用了 graph api 的依赖项,例如
<dependency>
<groupId>com.microsoft.graph</groupId>
<artifactId>microsoft-graph</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<!-- This dependency is only needed if you are using the TokenCrendentialAuthProvider -->
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.2.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在代码中我的导入是
import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.microsoft.graph.authentication.TokenCredentialAuthProvider;
import com.microsoft.graph.models.BodyType;
import com.microsoft.graph.models.EmailAddress;
import com.microsoft.graph.models.ItemBody;
import com.microsoft.graph.models.Message;
import com.microsoft.graph.models.Recipient;
import com.microsoft.graph.models.UserSendMailParameterSet;
import com.microsoft.graph.requests.GraphServiceClient;
import com.microsoft.graph.requests.MessageCollectionPage;
Run Code Online (Sandbox Code Playgroud)
代码出现错误
ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
.clientId(CLIENT_ID)
.clientSecret(CLIENT_SECRET).tenantId(TENANT_GUID).build();
TokenCredentialAuthProvider tokenCredentialAuthProvider = new TokenCredentialAuthProvider(SCOPES, clientSecretCredential);
GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( tokenCredentialAuthProvider ).buildClient();
MessageCollectionPage messagesPage …Run Code Online (Sandbox Code Playgroud) 根据MS Graph API 文档,businessPhones支持在带有eq比较的$filter查询中使用,就像imAddresses属性一样。

在检查 Microsoft 的使用查询参数文档时,有一个示例,其中在集合过滤器中使用imAddresses属性,并且它工作得很好。
GET https://graph.microsoft.com/v1.0/users?$filter=imAddresses/any(s:s eq 'admin@contoso.com')
我的目标是列出在其BusinessPhones集合属性中具有特定电话号码的所有用户。但是,当我尝试在类似查询中使用businessPhones属性时,该查询无法按预期工作。
GET https://graph.microsoft.com/v1.0/users?$filter=businessPhones/any(s:s eq '1234')
状态代码:400
{
"error": {
"code": "Request_UnsupportedQuery",
"message": "Unsupported or invalid query filter clause specified for property 'businessPhones' of resource 'User'.",
"innerError": {
"date": "2021-07-30T08:07:24",
"request-id": "ac3923be-de11-448f-b2b5-245edc82d20e",
"client-request-id": "ac3923be-de11-448f-b2b5-245edc82d20e"
}
}
}
Run Code Online (Sandbox Code Playgroud)
对我所缺少的有什么想法吗?
我正在尝试构建一个查询,在其中传递 groupId 参数,并使用 C# 中的 GraphServiceClient 作为回报获取所有用户及其组成员身份。
我能够在一个查询中获取用户和组成员身份,并且能够在单独的查询中通过 groupId(但没有组成员身份)获取所有用户。但我无法将这两个查询合并为一个结果。是否可以?
这是我获取用户及其组成员身份的代码(使用带有 memberOf 的扩展):
var users = await _graphServiceClient.Users
.Request()
.Filter(graphFilter) // used for searching on givenName and surname
.Select($"givenName,surname,mail,mobilePhone,id,userPrincipalName")
.Expand(e => e.MemberOf)
.GetAsync();
Run Code Online (Sandbox Code Playgroud)
这是我的代码,用于获取给定组中的用户:
var users = await _graphServiceClient
.Groups[groupId] // Id of the group I want to get users from
.Members
.Request()
.Select($"givenName,surname,mail,mobilePhone,id,userPrincipalName")
//.Expand(e => e.MemberOf) // e is a DirectoryObject, so this does not compile.
//.Expand(e => (e as Microsoft.Graph.User).MemberOf)
//.Expand("memberOf")
.GetAsync();
Run Code Online (Sandbox Code Playgroud)
有什么办法可以解决我的案子吗?我目前正在研究一种新方法,在从 /users 请求时是否可以在过滤器中使用 MemberOf,但我还不确定是否可能。
我正在使用 Microsoft Graph 从特定帐户的收件箱获取信息。该帐户有多个电子邮件别名。但是,即使在我$select查询该InternetMessageHeaders属性后,它也不包含电子邮件发送到的别名。
我发现,如果我还使用 选择并扩展查询singleValueExtendedProperties,我会得到我需要的内容,但现在我丢失了 中存在的一些标头InternetMessageHeaders。它还以一大堆文本的形式返回,看起来不太直接而难以解析。如果我能以某种方式将这个文本块解析为键:值映射,我可以合并这两个值并收工,但我不知道这是否可能。我希望它可以用multiValueExtendedProperties,但我不认为这是它的预期用途。
我正在使用 Microsoft Graph 的 SDK for .NET(当前使用 4.0.0),这是我迄今为止获取所有电子邮件的方法:
public async Task<List<Message>> PollEmails() {
var completeList = new List<Message>();
var messagesRequest = await graphClient.
Users[GraphOptions.AccountId] // Email account ID
.Messages // All Emails
.Request() // Create request w/ authorization & headers needed
.Select("internetMessageHeaders,singleValueExtendedProperties") // Additionally, select the email's headers
.Expand("singleValueExtendedProperties($filter=id eq 'String 0x007D')") // Without this filter, we cannot tell which email alias was …Run Code Online (Sandbox Code Playgroud) c# microsoft-graph-sdks microsoft-graph-mail .net-5 microsoft-graph-api