无法使用graph api get方法从outlook获取邮件
public List<Message> GetAllMails()
{
List<Message> mails = new List<Message>();
//var result = graphClientV1.Me.Messages.Request().GetAsync();
//IUserMessagesCollectionPage currentPage = result.Result;
IUserMessagesCollectionPage currentPage = graphClientV1.Me.Messages.Request().GetAsync().Result;
while (currentPage != null)
{
foreach (var mail in currentPage)
{
try
{
mails.Add(mail);
}
catch (Exception) { }
}
currentPage = (currentPage.NextPageRequest != null) ? currentPage.NextPageRequest.GetAsync().Result : null;
}
return mails;
}
我想从outlook获取所有邮件。
错误:
NullReferenceException:未将对象引用设置为对象的实例。
图表中的默认分页在电子邮件中仅为 10,因此,如果您尝试使用该方法获取文件夹中的所有电子邮件,由于您可能需要发出的请求数量(如果文件夹中有大量项目),速度会相当慢。文件夹),你被限制的可能性也会很高。
Graph SDK 有一个 PageIterator 类,因此最好使用它,将属性限制为您需要的,并将页面大小设置为最大 1000
例如
var messages = graphServiceClient.Me.Messages
.Request()
.Select(e => new {
e.Sender,
e.Subject,
})
.Top(1000)
.GetAsync().GetAwaiter().GetResult();
var pageIterator = PageIterator<Message>
.CreatePageIterator(
graphServiceClient,
messages,
// Callback executed for each item in
// the collection
(m) =>
{
Console.WriteLine(m.Subject);
return true;
}
);
pageIterator.IterateAsync().GetAwaiter().GetResult();
您可能还想考虑使用最新的基于 Kiota 的 Graph SDK 版本。