Reputation: 1175
I have the following functions to get messages using Graph API
var client = new GraphServiceClient(authenticationProvider);
var messages = await client.Users["[email protected]"].Messages
.Request()
.GetAsync();
I am only able to get the latest 10 messages. How do I get all the messages? I tried to have a look at the microsoft documentation here: https://learn.microsoft.com/en-us/graph/api/message-get?view=graph-rest-1.0&tabs=csharp but unable to find any clues.
Upvotes: 4
Views: 16506
Reputation: 11525
There is now a PageIterator included in the Microsoft Graph SDK that can be used to eager load all pages.
var messages = await graphClient.Me.Messages
.GetAsync(requestConfiguration =>
{
requestConfiguration.QueryParameters.Top = 10;
requestConfiguration.QueryParameters.Select =
["sender", "subject", "body"];
requestConfiguration.Headers.Add(
"Prefer", "outlook.body-content-type=\"text\"");
});
if (messages == null)
{
return;
}
var pageIterator = PageIterator<Message, MessageCollectionResponse>
.CreatePageIterator(
graphClient,
messages,
// Callback executed for each item in
// the collection
(msg) =>
{
Console.WriteLine(msg.Subject);
return true;
},
// Used to configure subsequent page
// requests
(req) =>
{
// Re-add the header to subsequent requests
req.Headers.Add("Prefer", "outlook.body-content-type=\"text\"");
return req;
});
await pageIterator.IterateAsync();
Upvotes: 0
Reputation: 1175
Found the answer after googling and trial error.
IUserMessagesCollectionPage msgs = await _client.Users[[email protected]].Messages.Request()
.Filter("put your filter here")
.GetAsync();
List<Message> messages = new List<Message>();
messages.AddRange(msgs.CurrentPage);
while (msgs.NextPageRequest != null)
{
msgs = await msgs.NextPageRequest.GetAsync();
messages.AddRange(msgs.CurrentPage);
}
Upvotes: 7
Reputation: 712
You can do it with .Top()
:
var client = new GraphServiceClient(authenticationProvider);
var messages = await client.Users["[email protected]"].Messages
.Request()
.Top(100)
.GetAsync();
Upvotes: 2
Reputation: 9519
I think you should refer to this document:
Depending on the page size and mailbox data, getting messages from a mailbox can incur multiple requests. The default page size is 10 messages. To get the next page of messages, simply apply the entire URL returned in @odata.nextLink
to the next get-messages request. This URL includes any query parameters you may have specified in the initial request.
Upvotes: 0