Hoje, é difícil encontrar um sistema que não se comunique com os seus usuários através do bom e velho e-mail. Seja para notificar uma ação ou confirmar uma solicitação, o e-mail continua sendo um ótimo meio para entrar em contato com as pessoas.
Sendo assim, será que é possível enviar e-mail com uma aplicação feita em Node.js? É claro que a resposta é sim. Neste artigo, vou te mostrar todos os passos para você sair enviar e-mails com a sua aplicação Node.
O que é necessário?
Não há muitos requisitos para nossa aplicação. Você vai precisar subir um servidor web local (para facilitar, vamos utilizar o Express) e o pacote npm que fará toda a mágica, o Nodemailer. Basicamente, ele é um módulo Node de código aberto que nos permite enviar e-mails de um jeito bem fácil. O projeto foi iniciado em 2010 e hoje é uma das principais escolhas para quem deseja enviar mensagens eletrônicas por meio de sua aplicação. Ele está sob a licença MIT.
Instale-o no seu projeto utilizando o seguinte comando:
npm install --save nodemailer
Com ele instalado, vamos configurá-lo.
Configuração
Primeiramente, importe o módulo para dentro do seu arquivo:
const nodemailer = require('nodemailer');
Feito isso, precisamos indicar ao Nodemailer qual será o serviço de e-mail que será utilizado para enviar as mensagens. Para isso, utilizamos o método createTransport que recebe como parâmetro um objeto literal com os dados de configuração. Como exemplo, irei configurar um e-mail dentro do meu domínio.
const transporter = nodemailer.createTransport({ host: "mail.diegopinho.com.br", port: 25, secure: false, // true for 465, false for other ports auth: { user: "no-reply@diegopinho.com", pass: "senhaqualquerdeteste" }, tls: { rejectUnauthorized: false } });
Feito isso, o que precisamos agora é configurar os dados sobre o e-mail que será enviado. Para isso, criaremos uma variável e armazenamos as informações nela:
const mailOptions = { from: 'no-reply@diegopinho.com', to: 'destinatario@yahoo.com', subject: 'E-mail enviado usando Node!', text: 'Bem fácil, não? ;)' };
Estes campos são os necessários para que o serviço funcione. Com os dois, conseguimos fazer a realização do envio com o método sendMail. Ele aceita dois parâmetros: o primeiro será as opções do envio (que colocamos no objeto mailOptions) e a segunda é a função de callback, que será chamada depois que o serviço for realizado. Esta função recebe dois outros parâmetros: error e info. O primeiro será retornado se ocorrer qualquer tipo de problema no envio (ex: problema para autenticar), caso contrário, será null. O segundo parâmetro retornará os dados sobre o envio.
transporter.sendMail(mailOptions, function(error, info){ if (error) { console.log(error); } else { console.log('Email enviado: ' + info.response); } });
E pronto! Com isso, já conseguimos enviar e-mail com o Node! Bem fácil, não é mesmo? Você pode criar sua aplicação e subi-la no Heroku, por exemplo, e integrar seus serviços para utilizarem ele para comunicação.
Configurações adicionais
Antes de terminar, gostaria de apontar mais dois detalhes importantes sobre o Nodemailer. O primeiro é que podemos configurar múltiplos destinatários em um único envio, basta separá-los com vírgula. Como no exemplo anterior, poderia ter configurado vários endereços:
const mailOptions = { …, to: 'destinatario@yahoo.com, 'destinatario2@yahoo.com, 'destinatario3@yahoo.com', };
A segunda configuração que gostaria de comentar é sobre o conteúdo do e-mail. Geralmente, utilizamos uma formatação nas mensagens para personalizá-las e passar a mensagem correta ao nosso público. Para que a mensagem não seja apenas um texto, podemos usar o atributo html.
const mailOptions = { …, html: '<h1>Título</h1><p>Texto!</p>' }
No site há inúmeras outras configurações que podem ser utilizadas, mas com essas já pra fazer muita coisa legal.
***
P.S.01: uma última ressalva que acho que vale a pena comentar, é que é possível utilizar o Gmail para realizar o envio de e-mails, mas temos que autorizar a nossa conta a realizá-los. Para isso, é necessário habilitar esta opção.
P.S.02: caso você não queria utilizar uma conta real de e-mail, é possível criar contas de teste no próprio serviço. Para ver como, clique aqui.
Referências
- https://www.w3schools.com/nodejs/nodejs_email.asp
- https://medium.com/@manojsinghnegi/sending-an-email-using-nodemailer-gmail-7cfa0712a799