public static async Task<SendMessageResponse> SendMessageAsync(string accessToken, SendMessageRequest sendMessageRequest)
        {
            var sendMessageResponse = new SendMessageResponse { Status = SendMessageStatusEnum.NotSent };

            using (var client = new HttpClient())
            {
                using (var request = new HttpRequestMessage(HttpMethod.Post, Settings.SendMessageUrl))
                {
                    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
                    request.Content = new StringContent(JsonConvert.SerializeObject(sendMessageRequest), Encoding.UTF8, "application/json");
                    using (HttpResponseMessage response = await client.SendAsync(request))
                    {
                        if (response.IsSuccessStatusCode)
                        {
                            sendMessageResponse.Status = SendMessageStatusEnum.Sent;
                            sendMessageResponse.StatusMessage = null;
                        }
                        else
                        {
                            sendMessageResponse.Status = SendMessageStatusEnum.Fail;
                            sendMessageResponse.StatusMessage = response.ReasonPhrase;
                        }
                    }
                }
            }

            return sendMessageResponse;
        }
        public static async Task<SendMessageResponse> SendMessageAsync(string accessToken,
            SendMessageRequest sendMessageRequest, string username)
        {
            var message = new MimeMessage();
            //message.From.Add(new MailboxAddress(sendMessageRequest.Message.));
            foreach (var to in sendMessageRequest.Message.ToRecipients)
            {
                message.To.Add(new MailboxAddress(to.EmailAddress.Name, to.EmailAddress.Address));
            }
            message.Subject = sendMessageRequest.Message.Subject;

            var builder = new BodyBuilder();

            // Set the plain-text version of the message text
            //builder.TextBody = @"";

            // Set the html version of the message text
            builder.HtmlBody = sendMessageRequest.Message.Body.Content;

            // Now we just need to set the message body and we're done
            message.Body = builder.ToMessageBody();
            var encodedEmail = Base64UrlEncode(message.ToString());
            var url = $"https://www.googleapis.com/upload/gmail/v1/users/{username}/messages/send?uploadType=media";
            var sendMessageResponse = new SendMessageResponse { Status = SendMessageStatusEnum.NotSent };
            using (var client = new HttpClient())
            {
                using (var request = new HttpRequestMessage(HttpMethod.Post, url))
                {
                    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
                    request.Content = new StringContent(encodedEmail, Encoding.UTF8, "message/rfc822");
                    using (var response = await client.SendAsync(request))
                    {
                        if (response.IsSuccessStatusCode)
                        {
                            sendMessageResponse.Status = SendMessageStatusEnum.Sent;
                            sendMessageResponse.StatusMessage = null;
                        }
                        else
                        {
                            sendMessageResponse.Status = SendMessageStatusEnum.Fail;
                            sendMessageResponse.StatusMessage = response.ReasonPhrase;
                        }
                    }
                }
            }
            return sendMessageResponse;
        }