Veja nesse artigo
Introdução
O Nodemailer é uma biblioteca do NodeJS que possibilita que o sistema, consiga realizar o envio de e-mail para um usuário.
Quase que todo sistema web atualmente, faz o envio de e-mail, seja de boas vindas, redefinição de senha, relatórios mais complexos, e-mails marketing e entre outras milhares de possibilidades.
Com isso, é essencial saber como se realiza o envio de e-mail com a linguagem que se trabalha e hoje vou mostrar como fazer com o NodeJS.
Nodemailer
A biblioteca foi criada em 2010, e atualmente é a biblioteca mais popular para este fim.
Suporta caracteres unicode, incluindo emoji, envio de anexo, conteúdo HTML, diferentes métodos de transporte e muito mais.
Para usar o Nodemailer é necessário ter o Node na versão 6 ou superior.
Como funciona o envio de e-mail
Primeiramente é necessário uma forma de transporte, que é o que enviará o e-mail. O transporte mais utilizado é o SMTP e todos os principais servidores de e-mail, implementam esse transporte.
O segundo passo é configurar quem enviará o e-mail e quem receberá este e-mail.
E o terceiro e último passo, é realizar o envio do e-mail passando todas as opções previamente configuradas.
Primeiro Exemplo
O exemplo abaixo, é o mesmo utilizado no site oficial do Nodemailer, nele é configurado o transporter, o objeto de envio e envio da mensagem.
"use strict";
const nodemailer = require("nodemailer");
async function main() {
let testAccount = await nodemailer.createTestAccount();
let transporter = nodemailer.createTransport({
host: "smtp.ethereal.email",
port: 587,
secure: false,
auth: {
user: testAccount.user,
pass: testAccount.pass,
},
});
let info = await transporter.sendMail({
from: '"Fred Foo 👻" <foo@example.com>',
to: "bar@example.com, baz@example.com",
subject: "Hello ✔",
text: "Hello world?",
html: "<b>Hello world?</b>",
});
console.log("Message sent: %s", info.messageId);
console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
}
main().catch(console.error);
Exemplo de e-mail com anexo
É possível realizar isso de diversas formas, pois pode ser passa há diferentes maneiras que o Nodemailer aceita para que seja enviados anexos.
Uma das formas, é passando o caminho do arquivo que está salvo no servidor, e a configuração fica assim:
let message = {
from: 'usuario@teste.com',
to: 'teste@teste.com',
subject: 'Veja os anexos',
html: 'Estou mandando alguns anexos para testar.'
attachments: [{
filename: 'boleto.pdf',
path: 'servidor/orcamentos/orcamento1.pdf'
}]
};
Repare que a chave Attachments é um array, com isso, para enviar vários anexos, é só passar mais chaves com filename e path.
Além dessa forma, também da para enviar por Stream, Buffer, URL, encoded e entre outras.
E-mail alternativo ao HTML
Quando é enviado um e-mail, pode ser enviado um HTML para o usuário, porém cabe ao leitor de e-mail decidir qual a melhor forma de mostrar esse e-mail ao seu usuário.
Com isso, caso o leitor de e-mail não tenha suporte a HTML, pode ser passado outro tipo para que caso o HTML não possa ser exibido, o conteúdo é entregue da mesma forma.
No exemplo abaixo é enviado um e-mail com conteúdo em HTML e em Markdown, e o leitor pode escolher qual o mais adequado a ser enviado:
html: '<b>Ola mundo!</b>',
alternatives: [
{
contentType: 'text/x-web-markdown',
content: '**Ola mundo!**'
}
];
Enviar e-mail profissional
Para isso é necessário utilizar um engine de views no NodeJS, para que seja possível ler o HTML e enviar ao cliente.
O engine de views que será utilizado é o EJS, e com ele será montado um HTML simples e depois enviado para o usuário.
Para este exemplo, utilizei uma API Express com uma rota /sendmail que ao acessá-la o e-mail é enviado.
<!-- Template simples de e-mail, arquivo com o nome email.ejs -->
<header style="background-color: black; color: #ffffff; padding: 10px;">
<h3>Seja bem vindo ao sistema</h3>
</header>
<article>
<p>Este é o seu acesso no sistema</p>
<p>Aproveite muito bem ele</p>
</article>
<footer style="background-color: black; color: #ffffff; padding: 10px;">
<h4>Siga as redes sociais</h4>
</footer>
const nodemailer = require("nodemailer");
const express = require("express");
const ejs = require("ejs");
app.get("/sendmail", (req, res) => {
ejs.renderFile(__dirname + "/email.ejs", { name: 'Stranger' }, function (err, data) {
if (err) {
console.log(err);
} else {
let transporter = nodemailer.createTransport({
host: "smtp.mailtrap.io",
port: 2525,
auth: {
user: USUARIO SMTP,
pass: SENHA SMTP
}
});
var mainOptions = {
from: '"Tester" teste@mail.com',
to: "email@teste.com",
subject: 'Hello, world',
html: data
};
console.log("html data ======================>", mainOptions.html);
transporter.sendMail(mainOptions, function (err, info) {
if (err) {
console.log(err);
} else {
console.log('Message sent: ' + info.response);
}
});
}
});
res.send("enviou");
});
app.listen(3000, () => {
console.log("Rodando ...");
});
Este e-mail irá mostrar o seguinte resultado:

Este e-mail tem uma formatação básica, mas sabendo que é possível realizar essa formatação, é dessa forma que agências e empresas fazem para enviar e-mails profissionais. Normalmente algum profissional faz a arte ou desenho do e-mail, e é passado para colocar no software que irá enviar para os clientes.
Para ver mais
Caso queira, gravei um vídeo completo com esses exemplos na prática:
Conclusão
Provavelmente, no sistema que irá trabalhar, será necessário configurar um envio de e-mail e o Nodemailer é uma excelente alternativa para esse fim, é uma biblioteca que já existe faz tempo e é a principal para este fim. Até o próximo post 🙂
Para ver outros canais onde o posto conteúdo, meu Github e também cursos, veja os Links do Programando Soluções.
Referências