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());
        }
예제 #6
0
 public static IUserMessagesCollectionRequest Search(this IUserMessagesCollectionRequest request, string value)
 {
     request.QueryOptions.Add(new QueryOption("$search", value));
     return(request);
 }