B2: Tạo action để xử lý gửi mail và ghi nhận trạng thái
public async Task HandleEmailAsync(EmailRequest emailRequest)
{
SmtpClient smtpClient = new SmtpClient();
MailMessage mail = new MailMessage();
try
{
//// Logic gửi email
mail.From = new MailAddress(FromAddress);
mail.To.Add(emailRequest.To);
mail.Subject = emailRequest.Subject;
mail.Body = emailRequest.Body;
mail.IsBodyHtml = true;
smtpClient.Host = Host;
smtpClient.EnableSsl = false;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new NetworkCredential(User, Pass);
smtpClient.Send(mail);
// Gửi email thành công
await UpdateRequestStatus(emailRequest.RequestId, "Completed", "Email sent successfully.");
}
catch (Exception ex)
{
// Gửi email thất bại
await UpdateRequestStatus(emailRequest.RequestId, "Failed", ex.Message);
}
}
private async Task UpdateRequestStatus(string requestId, string status, string message)
{
// Cập nhật trạng thái vào topic Kafka "email_status_updates"
var updateMessage = new
{
RequestId = requestId,
Status = status,
Message = message
};
var messageJson = JsonSerializer.Serialize(updateMessage);
await _producer.ProduceAsync("email_status_updates", new Message<string, string> { Key = requestId, Value = messageJson });
// Cập nhật trạng thái trong RequestStatusService (nếu cần)
_requestStatusService.UpdateRequestStatus(requestId, status, message);
}