public MessageProcessResult ProcessOutboundMessage(OutboundMessageRequest outboundRequest) { var result = new MessageProcessResult(); try { // send to postmark var postmarkClient = _clientFactory.GetClient(_configurationProvider); var response = postmarkClient.SendPostmarkMessage(outboundRequest); // everything went smooth - update message data received from postmark and insert to database var newMessage = Mapper.Map <OutboundMessageRequest, OutboundMessageDto>(outboundRequest); newMessage.PostmarkMessageId = response.MessageId; newMessage.PostmarkErrorCode = response.ErrorCode; newMessage.SubmittedAt = response.SubmittedAt; newMessage.PostmarkStatus = response.Status; newMessage.StatusId = (byte)OutboundMessageStatus.Sent; _mailBoxRepository.InsertOutboundMessage(newMessage); // update process result status correspondingly result.Status = ProcessingStatus.Success; result.Message = response.Status; } catch (Exception e) { // there has been an error while processing message result.Status = ProcessingStatus.Error; result.Message = $"{e.Message} {e.InnerException?.Message}"; } return(result); }
public OutboundMessagePostmarkResponse SendPostmarkMessage(OutboundMessageRequest messageRequest) { if (messageRequest == null) { throw new ArgumentNullException(nameof(messageRequest)); } var postmarkMessage = Mapper.Map <OutboundMessageRequest, PostmarkMessage>(messageRequest); var postmarkClient = new PostmarkDotNet.PostmarkClient(_serverToken); var postmarkResponse = new PostmarkResponse(); var task = Task.Run(async() => { postmarkResponse = await postmarkClient.SendMessageAsync(postmarkMessage); }); try { task.Wait(); } catch (AggregateException ae) { var innerException = ae.InnerExceptions.FirstOrDefault(); throw new CommunicationException("External service exception occured on SendPostmarkMessage.", innerException); } return(Mapper.Map <PostmarkResponse, OutboundMessagePostmarkResponse>(postmarkResponse)); }
public HttpResponseMessage Post([FromBody] OutboundMessageRequest messageRequest) { // check if valid data is received if (!ModelState.IsValid) { return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState)); } var processResult = _mailBoxManager.ProcessOutboundMessage(messageRequest); if (processResult.Status.IsSuccess()) { return(Request.CreateResponse(HttpStatusCode.OK, processResult.Message)); } var httpError = new HttpError(processResult.Message); return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, httpError)); }