public async Task <string> InsertEmailAsync(InsertEmailModel emailModel, ILambdaContext context) { var s3Client = new AmazonS3Client(); var sqsClient = new AmazonSQSClient(); var insertEmailService = new InsertEmailService(s3Client, sqsClient); return(await insertEmailService.InsertEmailAsync(emailModel)); }
private static SendRawEmailRequest CreateRawEmailModel(InsertEmailModel insertEmailModel) { using (var memoryStream = new MemoryStream()) { var message = GetMimeMessageFromEmailModel(insertEmailModel); message.WriteTo(memoryStream); return(new SendRawEmailRequest(new RawMessage(memoryStream))); } }
public async Task <string> InsertEmailAsync(InsertEmailModel emailModel) { var emailStorageId = Guid.NewGuid().ToString(); await UploadEmailToS3(emailStorageId, emailModel); await _sqsClient.SendMessageAsync( EnvironmentVariables.MailQueue, JsonConvert.SerializeObject(emailStorageId) ); return(emailStorageId); }
public void Handle(LoanHasBeenPaidOffEvent @event) { // Some logic (maybe business as well) related with actions when customer has taken loan var mailBody = $"Hi, {@event.CustomerFirstName}\n\nYour loan for {@event.LoanAmount} {@event.LoanCurrency} has been paid off."; var insertMailModel = new InsertEmailModel { To = @event.CustomerMailAddress, Subject = MailSubject, Body = mailBody }; _emailClient.InsertEmail(insertMailModel); }
public async Task <string> InsertEmailAsync(InsertEmailModel insertEmailModelModel) { insertEmailModelModel.From = _emailClientConfig.FromMailAddress; var lambdaRequest = new InvokeRequest { FunctionName = _insertEmailLambdaName, Payload = JsonConvert.SerializeObject(insertEmailModelModel) }; var invokeResult = await _lambdaClient.Value.InvokeAsync(lambdaRequest); CheckLambdaResult(invokeResult); return(invokeResult.Payload.Deserialize <string>()); }
private static MimeMessage GetMimeMessageFromEmailModel(InsertEmailModel mailTask) { var message = new MimeMessage { Subject = mailTask.Subject }; message.From.Add(new MailboxAddress(mailTask.From)); message.To.Add(new MailboxAddress(String.Empty, mailTask.To)); var body = new BodyBuilder { HtmlBody = mailTask.Body }; message.Body = body.ToMessageBody(); return(message); }
private async Task UploadEmailToS3(string emailStorageId, InsertEmailModel emailModel) { using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(emailModel)))) { var s3PutRequest = new PutObjectRequest { BucketName = EnvironmentVariables.MailSendingBucket, Key = emailStorageId, InputStream = stream }; var result = await _s3Client.PutObjectAsync(s3PutRequest); if (result.HttpStatusCode != HttpStatusCode.OK) { throw new Exception( "An error occured during putting S3 object." + $"Received status code {(int) result.HttpStatusCode} in response" ); } } }
public string InsertEmail(InsertEmailModel insertEmailModelModel) => InsertEmailAsync(insertEmailModelModel).GetAwaiter().GetResult();