@lucky4

Как передать пользователю данные, которые он отправил?

Есть два сервиса, апишка и смтп. Апишка на покупку какого-то товара. Когда пользователь совершает покупку - ему должно прийти на почту письмо что он заказал.

Ендпоинт на отправку какой-то покупки:
[HttpPost]
        public async Task<IActionResult> Add(OrderCreateModel orderModel)
        {
            var orderAdd = _mapper.Map<OrderDto>(orderModel);
            var orderCreated = await _orderService.AddAsync(orderAdd);

            _messageService.Enqueue(orderCreated);
            return CreatedAtAction(nameof(GetId), new { id = orderCreated.Id }, orderModel);
        }


И вот как у меня тригеррится СМТП сервис, когда приходит ордер:
public Task StartAsync(CancellationToken cancellationToken)
        {
            var factory = new ConnectionFactory()
            {
                HostName = _rabbitSettings.Value.HostName,
                UserName = _rabbitSettings.Value.UserName,
                Password = _rabbitSettings.Value.Password,
                Port = _rabbitSettings.Value.Port,
                VirtualHost = _rabbitSettings.Value.VirtualHost,
                AutomaticRecoveryEnabled = _rabbitSettings.Value.AutomaticRecoveryEnabled
            };

            IConnection connection = factory.CreateConnection();
            IModel model = connection.CreateModel();

            model.QueueDeclare(queue: "order",
                        durable: false,
                        exclusive: false,
                        autoDelete: false,
                        arguments: null);

            var consumer = new EventingBasicConsumer(model);

            consumer.Received += async (sender, e) =>
            {
                var body = Deserialize<Mail>(e.Body.ToArray());
                await _mailService.SendMessageAsync(body);
            };
            
            model.BasicConsume("order", true, consumer);

            return Task.CompletedTask;
        }


Который вызывает сервис уже на отправку:
public async Task SendMessageAsync(Mail mail)
        {
            var email = new MimeMessage();
            email.Sender = MailboxAddress.Parse(_mailSettings.Value.Mail);
            email.To.Add(MailboxAddress.Parse(mail.Email));
            email.Subject = mail.Subject;

            var builder = new BodyBuilder();
            builder.HtmlBody = mail.Body;
            email.Body = builder.ToMessageBody();

            using var smtp = new SmtpClient();
            smtp.Connect(_mailSettings.Value.Host, _mailSettings.Value.Port, SecureSocketOptions.StartTls);
            smtp.Authenticate(_mailSettings.Value.Mail, _mailSettings.Value.Password);

            await smtp.SendAsync(email);
            smtp.Disconnect(true);
        }


И вот захардкоджена моделька эта:
public class Mail
    {
        public string Email { get; set; } = "testingServiceSMTP@gmail.com";
        public string Subject { get; set; } = "Greetings!";
        public string Body { get; set; } = "Greetings!";
    }


Теперь вопрос, как мне отправить письмом то что прилетело с Rabbit(покупку товара, которая произошла на эндпоинте АПИ)
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы