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 nodemailerconst 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/mailconst 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' }};