Dev (Back & Front)ARTIGO

Envio de e-mail com .NET em 5 minutos

Envio de e-mail com .NET em 5 minutos
Imagem: Thiago Adriano

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:

Envio de e-mail com .NET
Email na caixa

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.

Thiago AdrianoAutor

Microsoft (MVP), atualmente trabalha como Arquiteto de Software para TV Bandeirantes. Nesses últimos anos, focou nas tecnologias criadas pela Microsoft, mas sempre esteve antenado para as novas tecnologias que estão surgindo no mercado. Em um breve resumo, é uma pessoa apaixonada pelo que faz, tem a sua profissão como hobby.

Ver perfil