private async Task <bool> ForwardMessage(string messageID, string recipientName, string recipientAddress, string forwardMessage)
        {
            //get authorization token
            Authenticator authenticator = new Authenticator();
            var           authInfo      = await authenticator.AuthenticateAsync(ExchangeResourceId);

            //send request through HttpClient
            HttpClient httpClient = new HttpClient();

            httpClient.BaseAddress = new Uri(ExchangeResourceId);

            //add authorization header
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", await authInfo.GetAccessToken());

            ForwardMessage forwardContent = new Models.ForwardMessage();

            forwardContent.Comment = forwardMessage;
            forwardContent.ToRecipients.Add(new Recipient()
            {
                Address = recipientAddress, Name = recipientName
            });

            StringContent postContent = new StringContent(JsonConvert.SerializeObject(forwardContent));

            postContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            //send request
            var response = httpClient.PostAsync("/ews/odata/Me/Inbox/Messages('" + messageID + "')/Forward", postContent).Result;

            if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.Accepted)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public async Task <ActionResult> Index(LeadContactViewModel vm)
        {
            var client = await GetExchangeClient();

            var contactResults = await(from i in client.Me.Contacts
                                       select i).ExecuteAsync();

            var contact = contactResults.CurrentPage.Where(c => c.Id == vm.selectedSalesStaffID).SingleOrDefault();

            //USE HTTPCLIENT
            //get authorization token
            Authenticator authenticator = new Authenticator();
            var           authInfo      = await authenticator.AuthenticateAsync(ExchangeResourceId);

            //send request through HttpClient
            HttpClient httpClient = new HttpClient();

            httpClient.BaseAddress = new Uri(ExchangeResourceId);

            //add authorization header
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", await authInfo.GetAccessToken());

            //prepare POST content for forward request
            ForwardMessage forwardContent = new Models.ForwardMessage();

            forwardContent.Comment = "This lead has been reassigned to you";
            forwardContent.ToRecipients.Add(new Recipient()
            {
                Address = contact.EmailAddress1, Name = contact.DisplayName
            });

            //convert POST content to JSON
            StringContent postContent = new StringContent(JsonConvert.SerializeObject(forwardContent));

            postContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            //send forward request
            var forwardResponse = httpClient.PostAsync("/ews/odata/Me/Inbox/Messages('" + vm.selectedLeadID + "')/Forward", postContent).Result;

            //delete message to remove from INBOX/Lead List
            //send delete request
            var deleteResponse = httpClient.DeleteAsync("/ews/odata/Me/Inbox/Messages('" + vm.selectedLeadID + "')").Result;

            //refresh leads
            vm.leads.Clear();
            var messageResults = await(from i in client.Me.Inbox.Messages
                                       where i.Subject.Contains("[SKU:")
                                       orderby i.DateTimeSent descending
                                       select i).ExecuteAsync();

            foreach (var message in messageResults.CurrentPage)
            {
                LeadInfo newContact = new LeadInfo();

                newContact.ID           = message.Id;
                newContact.email        = message.From.Address;
                newContact.message      = message.BodyPreview;
                newContact.dateReceived = message.DateTimeReceived.Value.DateTime;

                vm.leads.Add(newContact);
            }

            return(View(vm));
        }