Front End

7 fev, 2018

Enviando e-mail usando Node.js

Publicidade

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

  1. https://www.w3schools.com/nodejs/nodejs_email.asp
  2. https://medium.com/@manojsinghnegi/sending-an-email-using-nodemailer-gmail-7cfa0712a799