1

我们有一些代码已经成功运行了几个月,而昨天突然之间,它失败了。

基本上,我们有一个进程通过 Graph API C# SDK (v1.12.0) 登录到邮箱,​​获取未读消息,遍历每条消息,进行一些处理,然后尝试将每条消息标记为“已读”。

以下是相关代码:

var graphserviceClient = new GraphServiceClient(_metaData.GraphBaseURL,
                  new DelegateAuthenticationProvider(
                  (requestMessage) =>
                  {
                      requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
                      requestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                      requestMessage.Headers.Add("Prefer", "outlook.body-content-type='text'");

                      return Task.FromResult(0);
                  }));

                var unreadMails = graphserviceClient
                                .Users[_metaData.MailBox]
                                .MailFolders
                                .Inbox
                                .Messages
                                .Request()
                                .Filter("isRead eq false")
                                .Top(1000)
                                .Select("Body, Subject")
                                .GetAsync()
                                .Result;

                emailRetrievalCount = unreadMails.Count();

                // Determine if any results were returned
                if (unreadMails.Count > 0)
                {
                    // Create loop to process each item in the newResult object
                    foreach (var unreadMail in unreadMails)
                    {
                        // Set the isRead flag of the message to true
                        var readMail = graphserviceClient
                                       .Me
                                       .Messages[unreadMail.Id] //BREAKS HERE!!!
                                       .Request()
                                       .Select("IsRead")
                                       .UpdateAsync(new Message { IsRead = true })
                                       .Result;
                     }
                }

异常消息:

Microsoft.Graph.ServiceException:代码:ErrorInternalServerError\r\n消息:发生内部服务器错误。操作失败。,无法打开邮箱。

我们检查了邮箱或帐户的权限,没有任何改变。此外,这似乎不是权限问题,因为我们可以获取令牌、登录并获取消息列表。只是当我们尝试获取特定消息来更新“读取”状态时,它失败了。此外,我们尝试将 SDK 更新到最新版本 v1.19.0,但出现同样的问题。

4

1 回答 1

1

我能够确认服务行为发生了变化,现在阻止了从不同邮箱访问电子邮件。这是不正确的行为,已得到修复。通过更改您的呼叫访问.Users[_metaData.MailBox].Messages[unreadMail.Id]问题应该得到解决。

于 2019-09-18T02:06:25.603 回答