Envio de Email em TypeScript: guia completo com nodemailer e SMTP

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 TypeScript: do simples ao complexo



O envio de emails é uma das funções principais de qualquer aplicação web: registro de usuários, redefinição de senha, notificações de pedidos, newsletters. No ecossistema TypeScript (e Node.js), existem várias bibliotecas poderosas que permitem configurar o envio de emails de forma flexível. Neste artigo, vamos analisar três ferramentas populares: nodemailer, @sendgrid/mail e mailgun.js, mostrar exemplos de código em TypeScript, discutir o trabalho seguro com SMTP e a criação de templates.



1. nodemailer — cliente SMTP universal



nodemailer é a biblioteca mais popular para envio de emails a partir do Node.js. Ela suporta qualquer servidor SMTP (Gmail, Yandex, Mail.ru, servidor de email próprio), além de transportadores integrados para serviços populares. Funciona "pronto para uso" com TypeScript graças à presença de tipos.



Instalação

npm install nodemailernpm install @types/nodemailer --save-dev


Exemplo básico de envio via Gmail SMTP

import nodemailer from 'nodemailer';

interface EmailOptions { to: string; subject: string; text: string; html?: string;}

async function sendEmail(options: EmailOptions): Promise<void> { const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, }, });

const mailOptions = { from: `"My App" <${process.env.EMAIL_USER}>`, to: options.to, subject: options.subject, text: options.text, html: options.html, };

const info = await transporter.sendMail(mailOptions); console.log('Email enviado:', info.messageId);}

// UsosendEmail({ to: 'user@example.com', subject: 'Olá do TypeScript!', text: 'Este é um email de teste.', html: '<h1>Olá!</h1><p>Esta é a versão <strong>HTML</strong>.</p>',}).catch(console.error);


Trabalhando com múltiplos destinatários e anexos

async function sendBulkWithAttachments(): Promise<void> {  const transporter = nodemailer.createTransport({    host: 'smtp.yandex.ru',    port: 465,    secure: true,    auth: {      user: process.env.YANDEX_USER,      pass: process.env.YANDEX_PASS,    },  });

await transporter.sendMail({ from: '"Equipe" <no-reply@mydomain.ru>', to: ['user1@example.com', 'user2@example.com'], subject: 'Relatório mensal', text: 'Em anexo o arquivo com o relatório.', attachments: [ { filename: 'report.pdf', path: './docs/report.pdf', }, ], });}


2. SendGrid — serviço em nuvem para grandes volumes



SendGrid (parte da Twilio) é uma plataforma profissional para envio de emails. Ela fornece API, SDK para Node.js/TypeScript, análise de entrega e proteção contra spam. É recomendada para projetos com alta carga (milhares de emails por dia).



Instalação e configuração

npm install @sendgrid/mail


import sgMail from '@sendgrid/mail';

sgMail.setApiKey(process.env.SENDGRID_API_KEY!);

interface SendGridOptions { to: string | string[]; subject: string; html: string; from?: string;}

async function sendViaSendGrid(options: SendGridOptions): Promise<void> { const msg = { to: options.to, from: options.from || 'noreply@mydomain.com', subject: options.subject, html: options.html, };

try { await sgMail.send(msg); console.log('Email enviado via SendGrid'); } catch (error) { console.error('Erro no SendGrid:', error); throw error; }}


3. Mailgun — alternativa para desenvolvedores



Mailgun é outro serviço popular com REST API e compatibilidade com TypeScript

Recommendations