我已经设法为新的电子邮件到达创建了订阅,但是Microsoft Graph API并未对此进行通知

时间:2020-07-20 11:45:06

标签: microsoft-graph-api

我已经成功创建了一个订阅,用于接收有关新电子邮件到达指定通知URL的通知。每次调用创建订阅的API时,我都会收到订阅ID。但是由于某些原因,当我向连接的电子邮件地址发送电子邮件时,Graph API不会进行通知(在Subscription对象中指定了通知URL)。

我承认,一开始我错过了通过HTTP接受的状态代码对Graphs通知请求进行正确响应的机会。

我已经阅读了此答案,但没有太多建议Here。有帮助吗?

订阅对象

    Subscription subscription = new Subscription()
                    {
                        ChangeType = "updated",
                        NotificationUrl = "XXNotificationUrlXX",
                        Resource = "users/" + UserId + "/messages",
                        ExpirationDateTime = DateTime.UtcNow.AddMinutes(15),
                        ClientState = ClientStateForNewEmail
                    };

创造成功响应

    {
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#subscriptions/$entity",
    "id": "7b468a72-f521-43e3-aadc-7133282437f3",
    "resource": "users/{UserId}/messages",
    "applicationId": "XXAppIdXX",
    "changeType": "updated",
    "clientState": "XXClientStateXX",
    "notificationUrl": "XXNotificationUrlXX",
    "expirationDateTime": "2020-07-20T18:27:37.9356913Z",
    "creatorId": "44d82a81-a027-473f-92ac-621108163c94",
    "latestSupportedTlsVersion": "v1_2"
   }

我代表Apps在使用,这就是为什么:user / {UserId} / messages

创建代码

                    var subrslt = await graphServiceClient.Subscriptions.Request().AddAsync(subscription).ConfigureAwait(false);

通知网址代码:

   try
            {
                return _TrialRunService.postrequest(validationToken).Result;//returns Accepted if no error
            }
            catch (Exception ex)
            {
                try
                {
                    
//Log if any error
                }
                catch {//To Guarantee Accepted Response(in any case) delivery to Graph Api }
            }
            return new HttpResponseMessage(HttpStatusCode.Accepted) { Content = new StringContent("") };

无论我们是否遇到任何错误,我都试图保证对Graph API的接受响应。

1 个答案:

答案 0 :(得分:0)

您的订阅使用的是更新的更改类型。因此,只有当有人编辑邮箱中已存在的电子邮件时,才会触发该消息。 要接收有关新电子邮件的通知,需要“创建”更改类型。