Пример #1
0
        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)));
            }
        }
Пример #3
0
        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);
        }
Пример #5
0
        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);
        }
Пример #7
0
        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"
                              );
                }
            }
        }
Пример #8
0
 public string InsertEmail(InsertEmailModel insertEmailModelModel) => InsertEmailAsync(insertEmailModelModel).GetAwaiter().GetResult();