Como enviar emails em aplicações NestJS

Node.js

Como enviar emails em aplicações NestJS

Luiz Duarte
Escrito por Luiz Duarte em 25/04/2024
Junte-se a mais de 34 mil devs

Entre para minha lista e receba conteúdos exclusivos e com prioridade

É muito comum em projetos de software web que exista a necessidade de envio de mensagens por e-mail, os chamados e-mails transacionais e em projetos NestJS não seria diferente. Embora não seja algo particularmente difícil e talvez você até já tenha uma ideia de como fazer se já fez isso com Node.js antes, no tutorial de hoje eu vou lhe ensinar como configurar o seu projeto NestJS para envio de emails. Obviamente parto do pressuposto que você já sabe o básico de NestJS, mas se não souber, comece por este outro tutorial aqui.

Para que consiga fazer este tutorial você vai precisar ter uma conta de email criada em algum provedor e ter em mãos os dados da conexão SMTP da mesma ou usar um provedor fake (falarei mais adiante). Essas configurações são as mesmas que são necessárias para envio via ferramentas estilo MS Outlook e Apple Mail, você encontra elas facilmente na documentação de ajuda do seu provedor de email. Opcionalmente e buscando uma abordagem ainda mais profissional, você pode utilizar um SMTP Gateway profissional, como SendGrid, Mandrill, Mailgun e outros.

Para usar um provedor fake durante o desenvolvimento é muito simples, você pode obter dados de teste no ethereal.email.

Vamos lá!

Livro Node.js

#1 – Setup do Projeto

Vamos começar criando um novo projeto NestJS, com o comando abaixo.

Agora vamos instalar a dependência que vamos precisar. A saber:

Comando de instalação:

E também os types do Nodemailer como dependência de desenvolvimento, para melhor suporte ao Javascript.

Opcionalmente você pode também usar um arquivo .env para fazer a gestão de variáveis de ambiente do projeto, como ensinei neste outro tutorial. Não é obrigatório, mas ajuda na hora de fazer setup do projeto em uma nova máquina.

E com isso temos nosso projeto criado e minimamente configurado.

Curso Node.js e MongoDB

#2 – Configuração do Módulo

Agora que temos nosso projeto criado e com as dependências instaladas, é hora de programarmos o envio de email com ele, usando o pacote Nodemailer, o mais popular do mundo JS para esta atividade. Mas devemos começar importando o MailerModule para dentro do módulo em que iremos utilizá-lo, como abaixo, onde importo e configuro no app.module.ts que vem por padrão em projetos Nest.

Aqui nós temos três configurações importantes cujas informações você pegará com seu provedor de SMTP:

  • transport: o endereço de SMTP Transport do seu provedor de email. Ele pode usar SMTP ou SMTPS como protocolo e deve conter a conta de email que será usada na autenticação ([email protected]), a senha (password) e o servidor (smtp.domain.com);
  • secure: isso varia entre os provedores, alguns usam false (porta 587) e outros usam true (porta 465), tem de verificar na informação do seu provedor;
  • from: geralmente é o mesmo endereço de email usado na autenticação, indica qual a conta que vai enviar as mensagens;

Se estiver utilizando .env, vai querer colocar algumas destas configurações (ou todas) no referido arquivo, para facilitar a gestão.

Com isso temos nosso módulo configurado para envio SMTP.

Curso Beholder
Curso Beholder

#3 – Envio de Mensagens

Agora que temos nosso módulo de envio importado e configurado, é hora de usar ele em nosso controller. Usarei abaixo o app.controller.ts que já vem no projeto padrão do NestJS.

Aqui eu comecei importando o MailerService no topo do arquivo e depois declarei nosso mailerService no constructor do controller para que essa dependência seja injetada pelo AppModule que configuramos anteriormente. Uma vez com essa dependência injetada, podemos utilizá-la dentro de qualquer função do nosso controller, sendo que optei por usá-la no getHello que já vem por padrão como exemplo. Claro que você pode criar outra função para isso.

O envio da mensagem de email se dá pela função sendMail do mailerService e espera um objeto de mensagem por parâmetro, com to (destinatário), subject (assunto) e text (conteúdo do email). Aqui eu mandei strings simples mas claro que você pode montar algo mais complexo.

Para testar é muito simples, suba sua aplicação NestJS e acesse-a pelo navegador mesmo, já que é uma rota GET na raiz do backend. O resultado em poucos segundos, se tudo estiver correto, será uma mensagem nova na caixa de email do destinatário e um Hello World na tela do navegador.

Até a próxima!

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *