public async IAsyncEnumerable <string> EnumerateMailsAsync(string address) { var messages = await _client.Me.Messages .Request() .Filter($"from/emailAddress/address eq '{address}'") .GetAsync() .ConfigureAwait(false); IUserMessagesCollectionRequest nextPageRequest = null; do { nextPageRequest = messages.NextPageRequest; foreach (var message in messages) { _logger.Debug( $"Reading message from {message.ReceivedDateTime:R} {message.From.EmailAddress.Address} {message.Id}"); yield return(message.Body.Content); } if (nextPageRequest != null) { messages = await nextPageRequest.GetAsync().ConfigureAwait(false); } } while (nextPageRequest != null); }
/// <summary> /// Initializes the NextPageRequest property. /// </summary> public void InitializeNextPageRequest(IBaseClient client, string nextPageLinkString) { if (!string.IsNullOrEmpty(nextPageLinkString)) { this.NextPageRequest = new UserMessagesCollectionRequest( nextPageLinkString, client, null); } }
/// <summary> /// retrieve the next page of messages /// </summary> /// <param name="cancellationToken">The <see cref="CancellationToken"/> for the request.</param> /// <returns>the next collection of messages or null if there are no more messages</returns> public async Task <IUserMessagesCollectionPage> NextPageEmailsAsync(CancellationToken cancellationToken) { if (_nextPageRequest != null) { var messages = await _nextPageRequest.GetAsync(cancellationToken); _nextPageRequest = messages.NextPageRequest; return(messages); } // no more messages return(null); }
/// <summary> /// Retrieve current connected user's emails. /// <para>(default=10)</para> /// <para>Permission Scope : Mail.Read (Read user mail)</para> /// </summary> /// <param name="cancellationToken">The <see cref="CancellationToken"/> for the request.</param> /// <param name="top">The number of items to return in a result set.</param> /// <param name="selectFields">array of fields Microsoft Graph has to include in the response.</param> /// <returns>a Collection of Pages containing the messages</returns> public async Task <IUserMessagesCollectionPage> GetEmailsAsync(CancellationToken cancellationToken, int top = 10, MicrosoftGraphMessageFields[] selectFields = null) { IUserMessagesCollectionPage messages = null; if (selectFields == null) { messages = await _graphProvider.Me.Messages.Request().Top(top).OrderBy(OrderBy).GetAsync(cancellationToken); } else { string selectedProperties = MicrosoftGraphHelper.BuildString <MicrosoftGraphMessageFields>(selectFields); messages = await _graphProvider.Me.Messages.Request().Top(top).OrderBy(OrderBy).Select(selectedProperties).GetAsync(); } _nextPageRequest = messages.NextPageRequest; return(messages); }
//Extension methods for the IPagedCollection interfaces returned //by the Microsoft.Graph.GraphService //The GraphServiceExtension methods use these extension methods //to interact with the IPagedCollection interfaces returned by the //Microsoft.Graph.GraphService //public static async Task<TElement[]> GetAllAsnyc<TElement>( // this IPagedCollection<TElement> pagedCollection) //{ // var list = new List<TElement>(); // var collection = pagedCollection; // while (true) // { // list.AddRange(collection.CurrentPage); // if (!collection.MorePagesAvailable) break; // collection = await collection.GetNextPageAsync(); // } // return list.ToArray(); //} public static async Task <Message[]> GetAllAsync(this IUserMessagesCollectionRequest pagedCollectionRq) { var list = new List <Message>(); var collectionRequest = pagedCollectionRq; while (true && collectionRequest != null) { var pageList = await collectionRequest.GetAsync(); if (pageList.CurrentPage.Count > 0) { list.AddRange(pageList.CurrentPage); collectionRequest = pageList.NextPageRequest; } else { break; } } return(list.ToArray()); }
public static IUserMessagesCollectionRequest Search(this IUserMessagesCollectionRequest request, string value) { request.QueryOptions.Add(new QueryOption("$search", value)); return(request); }