Dando continuidade a minha serie de artigos com o tema dica rápida, hoje demonstrarei como criar um fluxo de envio de e-mail utilizando a biblioteca FluentEmail.Core.
Link do Github da biblioteca: https://github.com/lukencode/FluentEmail
Como esse é um artigo com o intuito de ser algo rápido e prático, eu pularei a parte de criação de um novo projeto, partindo do ponto que você já tem um criado.
Caso tenha interesse em clonar o projeto desenvolvido para este post, segue o seu link no meu Github:
Bom, o nosso primeiro passo será importar as bibliotecas “FluentEmail.Core” e “FluentEmail.Smtp” para o nosso projeto.
Para fazer isso, você pode utilizar o seguinte comando no terminal do seu projeto:
dotnet add package FluentEmail.Core
dotnet add package FluentEmail.Smtp
Com a etapa das bibliotecas OK, adicione o seguinte trecho de código no seu arquivo Program.cs.
#region [DI]
builder.Services
.AddFluentEmail("seu_gmail@gmail.com")
.AddSmtpSender("smtp.gmail.com", 587);
#endregion
Obs.: Acima estão os dados básicos de SMTP, para utilizar você precisa do seu e-mail de login e senha para que ele funcione.
Agora que a biblioteca está importada e já foi injetada no seu projeto, vamos criar um serviço de envio de e-mail.
Crie um novo diretório no seu projeto chamado Infra e dentro dele um outro diretório chamado Mail com um arquivo chamado MailService.cs.
Em seguida atualize este arquivo com o seguinte trecho de código:
public class MailService
{
private readonly IFluentEmail _fluentEmail;
public MailService(IFluentEmail fluentEmail) => _fluentEmail = fluentEmail;
public async Task SendMail(string to, string message) => await _fluentEmail.To(to).Body(message).SendAsync();
}
Agora registre ele no seu arquivo program.cs:
builder.Services.AddTransient<MailService>();
Com essa etapa básica OK, vamos criar um VM para que possamos receber os dados de quem vai receber o nosso e-mail l e a mensagem e atualizar a nossa controller.
Crie um novo diretório chamado Model e dentro dele um arquivo chamado MailViewMode.cs, em seguida atualize este arquivo com o seguinte trecho de código:
public class MailViewModel
{
public string To { get; set; }
public string Message { get; set; }
}
E atualize a sua controller injetando o nosso MailService.
namespace dotnet_sendmail.Controllers;
[ApiController]
[Route("[controller]")]
public class SendMailController : ControllerBase
{
private readonly MailService _mailService;
public SendMailController(MailService mailService) => _mailService = mailService;
[HttpPost]
public async Task<IActionResult> Post([FromBody] MailViewModel mailViewModel)
{
try
{
await _mailService.SendMail(mailViewModel.To, mailViewModel.Message);
return Ok("Email enviado com sucesso");
}
catch (Exception ex)
{
return Ok($"Erro ao tentar enviar o e-mail {ex.Message}");
}
}
}
Bom, para testar você pode executar o seu projeto e validar os passos anteriores via Swagger 🙂
A seguir você tem uma imagem demonstrando o envio funcionando correntamente e uma outra com o e-mail chegando na minha caixa de entrada de e-mails:
Bom era isso que eu gostaria de demonstrar para vocês pessoal, espero que tenham gostado e até um próximo artigo.
*O conteúdo deste artigo é de responsabilidade do(a) autor(a) e não reflete necessariamente a opinião do iMasters.