我们有一些代码已经成功运行了几个月,昨天突然间,它失败了。
基本上,我们有一个过程,该过程通过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,但是会出现相同的问题。
答案 0 :(得分:1)
我能够确认存在服务行为更改,该更改现在阻止了从其他邮箱访问电子邮件。这不是正确的行为,已得到修复。通过更改您对访问.Users[_metaData.MailBox].Messages[unreadMail.Id]
的访问权限,问题应该可以解决。