public ExternalEmail(Email email)
 {
     EmailReference = email.EmailReference;
     ToAddresses = StringifyEmailAddresses(email.To);
     FromAddress = $"LetMe <{email.FromAddress.Email}>";
     Cc = StringifyEmailAddresses(email.Cc);
     Bcc = StringifyEmailAddresses(email.Bcc);
     Subject = email.Subject;
     PlainTextBody = email.PlainText;
     HtmlBody = email.Html;
     Attachments = new List<ExternalAttachment>();//TODO
     EmailDate = new DateTime();//the server will stamp the email outbound
 }
        public HttpResponseMessage SendEmail(Email email)
        {
            var result = false;

            //Use external service to actually send the email
            var sendResult = SendExternalEmail(email);

            //create a record in comms if successful
            if (sendResult)
                result = _emailService.CreateEmail(Mapper.Map<Core.Objects.Email>(email), false);

            return result
                ? new HttpResponseMessage { StatusCode = HttpStatusCode.Created }
                : new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError };
        }
        private bool SendExternalEmail(Email email)
        {
            var jsonEmail = JsonConvert.SerializeObject(new ExternalEmail(email));

            var client = new RestClient
            {
                BaseUrl = new Uri("https://letme-transactionalemail.azurewebsites.net/api"),
                Authenticator = new HttpBasicAuthenticator(_apiAuthenticationSettings.AppId,
                    _apiAuthenticationSettings.ApiKey)
            };

            var request = new RestRequest("/mail", Method.POST);
            request.RequestFormat = DataFormat.Json;
            request.AddHeader("Accept", "application/json");
            request.Parameters.Clear();
            request.AddParameter("application/json", jsonEmail, ParameterType.RequestBody);

            var response = client.Execute(request);

            return response.StatusCode != HttpStatusCode.InternalServerError;
        }
        public HttpResponseMessage UpdateEmail(string emailReference, Email email)
        {
            var result = _emailService.UpdateEmail(emailReference, Mapper.Map<Core.Objects.Email>(email));

            return result
                ? new HttpResponseMessage { StatusCode = HttpStatusCode.OK }
                : new HttpResponseMessage { StatusCode = HttpStatusCode.InternalServerError };
        }