无法使用图形 API 从 Outlook 获取电子邮件 - 出现 NullReferenceException:对象引用未设置到对象实例错误

问题描述 投票:0回答:1

无法使用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:未将对象引用设置为对象的实例。

c# get microsoft-graph-api outlook-restapi rest-client
1个回答
0
投票

图表中的默认分页在电子邮件中仅为 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 版本。

© www.soinside.com 2019 - 2024. All rights reserved.