Envio de email em JavaScript (Node.js): nodemailer, sendgrid, mailgun

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Envio de email em JavaScript (Node.js): nodemailer, sendgrid, mailgun



O envio de email é uma das funções-chave das aplicações web modernas: registro de usuários, redefinição de senhas, notificações e campanhas de marketing. No ecossistema Node.js, existem várias soluções testadas que permitem integrar a funcionalidade de e-mail em questão de minutos. Neste artigo, vamos detalhar três ferramentas populares: nodemailer, sendgrid e mailgun. Você aprenderá como configurar SMTP, enviar e-mails com anexos e templates HTML, além de quais métricas monitorar.



1. Nodemailer — cliente SMTP universal



Nodemailer é a biblioteca mais popular para envio de e-mail em Node.js. Ela suporta SMTP, SES, Sendmail e vários transportes. Principais vantagens:



  • Configuração simples via conta SMTP (Gmail, Yandex, Mail.ru).
  • Suporte a anexos, imagens inline, templates HTML.
  • Trabalho com filas e pools de conexão.
  • Envio assíncrono com async/await.


Instalação e envio básico

npm install nodemailer


const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 587, secure: false, // true para porta 465 auth: { user: 'seu-email@gmail.com', pass: 'sua-senha' // ou senha de aplicativo }});

const mailOptions = { from: '"Remetente" <seu-email@gmail.com>', to: 'destinatario@example.com', subject: 'Olá do Node.js!', text: 'Esta é uma mensagem de teste.', html: '<h1>Olá!</h1><p>Esta é a versão HTML.</p>'};

const sendMail = async () => { const info = await transporter.sendMail(mailOptions); console.log('E-mail enviado:', info.messageId);};

sendMail().catch(console.error);


Envio com anexos

const mailOptions = {  // ...campos principais  attachments: [    {      filename: 'documento.pdf',      path: '/caminho/para/documento.pdf'    },    {      filename: 'imagem.png',      content: fs.createReadStream('/caminho/para/imagem.png')    }  ]};


Importante: para Gmail, use senha de aplicativo ou OAuth2.



2. SendGrid — serviço em nuvem para e-mails transacionais



SendGrid (parte da Twilio) fornece uma API poderosa para envio de e-mail com alta taxa de entrega. Adequado para startups e grandes projetos. Principais recursos:



  • API com chaves de acesso (sem SMTP).
  • Templates dinâmicos (Handlebars).
  • Analytics: aberturas, cliques, cancelamentos de inscrição.
  • Plano gratuito de até 100 e-mails/dia.


Instalação e envio

npm install @sendgrid/mail


const sgMail = require('@sendgrid/mail');sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const msg = { to: 'destinatario@example.com', from: 'remetente@example.com', subject: 'E-mail transacional', text: 'Texto do e-mail', html: '<strong>Conteúdo HTML</strong>', attachments: [ { content: 'conteudocodificadoembase64', filename: 'fatura.pdf', type: 'application/pdf', disposition: 'attachment' } ]};

sgMail.send(msg) .then(() => console.log('E-mail enviado')) .catch(console.error);


Uso de templates dinâmicos

const msg = {  to: 'usuario@example.com',  from: 'noreply@meusite.com',  templateId: 'd-xxxxxxxxxxxxxxxx',  dynamicTemplateData: {    username: 'João',    orderLink: 'https://meusite.com/pedido/123'  }};


3. Mailgun — para alta

Recommendations