Есть два сервиса, апишка и смтп. Апишка на покупку какого-то товара. Когда пользователь совершает покупку - ему должно прийти на почту письмо что он заказал.
Ендпоинт на отправку какой-то покупки:
[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(покупку товара, которая произошла на эндпоинте АПИ)