标签: microsoft-graph-api

如何获取邮箱中的邮件数量?

我在计算邮箱消息数时遇到问题。我使用 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

我错过了什么?

感谢您的任何帮助!

c# microsoft-graph-api

1
推荐指数
1
解决办法
1817
查看次数

使用 MS Graph 库发送带有大附件的电子邮件

最近微软宣布可以发送附件大于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

1
推荐指数
1
解决办法
3395
查看次数

Azure Active Directory 工作负载未启用丰富通知

我正在尝试在 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)

azure azure-active-directory microsoft-graph-api

1
推荐指数
1
解决办法
1383
查看次数

如何使用 microsoft graph api 获取任务的优先级?

我通过 microsoft graph api 在 microsoft planner 中创建了任务。我无法检索任务的优先级。应该研究哪个领域?

microsoft-graph-api

1
推荐指数
1
解决办法
992
查看次数

Microsoft Graph API:访问令牌验证失败。无效观众

我正在尝试将我的应用程序从 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)

任何提示将不胜感激,谢谢!

oauth-2.0 jwt azure-active-directory microsoft-graph-api

1
推荐指数
1
解决办法
1万
查看次数

在 Graph API 中搜索用户

在我的 C# 应用程序中,我尝试通过 Graph API 搜索用户。我唯一的参数是存储在 onPremisesSamAccountName 字段中的用户名。

通过 Graph Explorer 我可以成功运行查询

https://graph.microsoft.com/v1.0/users?$count=true&$search="onPremisesSamAccountName:myusername"&$select=id,displayName

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

1
推荐指数
1
解决办法
1379
查看次数

使用 Spring Boot 的 Microsoft Graph api 邮件服务

我正在使用 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)

java spring-boot microsoft-graph-api

1
推荐指数
1
解决办法
8012
查看次数

使用 MS Graph API 按公司电话号码过滤用户失败

根据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)

对我所缺少的有什么想法吗?

odata microsoft-graph-api

1
推荐指数
1
解决办法
1147
查看次数

在 Graph API 中使用组查询成员展开

我正在尝试构建一个查询,在其中传递 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,但我还不确定是否可能。

c# microsoft-graph-api graphserviceclient

1
推荐指数
1
解决办法
2492
查看次数

使用 Microsoft Graph SDK 在统一列表中获取所有电子邮件标头?

我正在使用 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

1
推荐指数
1
解决办法
2294
查看次数