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): Guia completo



No desenvolvimento web moderno, a capacidade de enviar emails programaticamente é uma funcionalidade crítica para qualquer aplicação séria. Seja para confirmação de registro, redefinição de senha, notificações ou campanhas de marketing — o Node.js oferece várias soluções poderosas para integrar funções de email. Neste artigo, vamos detalhar as três abordagens mais populares: a biblioteca nativa nodemailer, o serviço em nuvem SendGrid e a API flexível Mailgun.



Por que é necessária uma biblioteca separada para envio de email?

O Node.js não possui recursos nativos para trabalhar com o protocolo SMTP ou APIs REST de serviços de email. Por isso, os desenvolvedores utilizam bibliotecas especializadas que cuidam de:

  • Formatação de mensagens MIME corretas (incluindo HTML, anexos, imagens inline);
  • Gerenciamento de filas e novas tentativas em caso de erros de rede;
  • Armazenamento e transmissão segura de credenciais;
  • Suporte a provedores de email populares (Gmail, Yandex, Mail.ru, servidores corporativos).


1. Nodemailer — Cliente SMTP universal

Nodemailer é o padrão de facto para envio de email em Node.js. Ele suporta tanto SMTP clássico quanto integração com OAuth2. A biblioteca funciona sem dependências adicionais e permite enviar emails através de qualquer servidor SMTP.



Instalação

npm install nodemailer


Exemplo básico de envio via SMTP do Gmail

const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 587, secure: false, // true para 465, false para os demais auth: { user: 'seu-email@gmail.com', pass: 'sua-senha-de-app' // Use senha de aplicativo, não a principal! }});

const mailOptions = { from: '"Nome do Remetente" <seu-email@gmail.com>', to: 'destinatario@example.com', subject: 'Olá do Node.js', text: 'Este é um email de texto simples.', html: '<b>Este é um texto em negrito em HTML</b>'};

transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log('Erro:', error); } console.log('Email enviado: %s', info.messageId);});


Trabalhando com anexos

mailOptions.attachments = [    {   // arquivo no disco        filename: 'documento.pdf',        path: '/caminho/para/documento.pdf'    },    {   // conteúdo como string        filename: 'notas.txt',        content: 'Arquivo de texto criado dinamicamente'    }];


2. SendGrid — Serviço em nuvem para emails transacionais

SendGrid (agora parte da Twilio) fornece uma API REST poderosa e garante alta taxa de entrega. A biblioteca @sendgrid/mail simplifica a integração. É adequada para projetos onde a análise de aberturas, cliques e cancelamentos de inscrição é importante.



Instalação

npm install @sendgrid/mail


Exemplo de envio

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

const msg = { to: 'destinatario@example.com', from: 'remetente@seudominio.com', // O domínio deve ser verificado no SendGrid subject: 'Notificação do serviço', text: 'Versão em texto do email', html: '<h1>Olá!</h1><p>Este email foi enviado via SendGrid.</p>',};

sgMail.send(msg) .then(() => console.log('Email enviado com sucesso')) .catch((error) => console.error(error.toString()));


Envio com templates dinâmicos

const msg = {    to: 'usuario@example.com',    from: 'teste@example.com',    templateId: 'd-xxxxxxxxxxxxxxxxxxxx', // ID do template do SendGrid    dynamicTemplateData: {                    

Recommendations