Envio de email em TypeScript: guia completo
TypeScript é um superconjunto estritamente tipado de JavaScript, amplamente utilizado em aplicações web modernas. O envio de email é uma das tarefas essenciais para backend, notificações e marketing. Neste artigo, analisaremos detalhadamente várias bibliotecas para envio de email em TypeScript, incluindo configuração, envio de emails simples e HTML, além de trabalho com anexos.
Por que usar TypeScript para envio de email?
TypeScript adiciona tipagem, o que reduz a quantidade de erros durante o desenvolvimento. No envio de email, isso é especialmente importante: tipos corretos para host SMTP, porta, credenciais e opções do email ajudam a evitar erros em tempo de execução. Além disso, TypeScript suporta construções modernas async/await, tornando o código mais limpo e compreensível.
Principais bibliotecas para envio de email em TypeScript
- nodemailer — a biblioteca mais popular para Node.js, totalmente compatível com TypeScript. Suporta SMTP, Sendmail, anexos, templates HTML.
- @sendgrid/mail — cliente oficial do SendGrid para Node.js com tipos TypeScript. Utiliza a API do SendGrid, não requer SMTP.
- aws-sdk (SES) — Amazon Simple Email Service. Solução poderosa para envios em massa, integração com AWS.
- emailjs — biblioteca leve com suporte a TypeScript, mas menos popular.
Instalação e configuração do nodemailer com TypeScript
Instale os pacotes via npm:
npm install nodemailernpm install @types/nodemailer --save-devExemplo básico de envio de email via SMTP (Gmail, Yandex, Mail.ru, etc.):
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({ host: 'smtp.gmail.com', port: 587, secure: false, // true para porta 465 auth: { user: 'your-email@gmail.com', pass: 'your-password-or-app-password', }, });
const mailOptions = { from: '"Seu Nome" <your-email@gmail.com>', 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!', html: '<h1>Teste</h1><p>Este é um email HTML.</p>',});Importante: Para Gmail, ative "Acesso a aplicativos menos seguros" ou use uma senha de aplicativo (App Password). Para produção, é melhor usar OAuth2.
Envio de email via SendGrid em TypeScript
SendGrid fornece uma API pronta, que não requer SMTP. Instalação:
npm install @sendgrid/mailExemplo de envio:
import sgMail from '@sendgrid/mail';
sgMail.setApiKey('YOUR_SENDGRID_API_KEY');
interface SendGridMessage { to: string; from: string; subject: string; html: string;}
async function sendWithSendGrid(message: SendGridMessage): Promise<void> { try { await sgMail.send(message); console.log('Email enviado via SendGrid'); } catch (error) { console.error('Erro ao enviar:', error); }}
sendWithSendGrid({ to: 'user@example.com', from: 'sender@yourdomain.com', subject: 'Teste SendGrid + TypeScript', html: '<p>Esta mensagem foi enviada via API do SendGrid.</p>',});Envio de email com anexos em TypeScript
nodemailer suporta anexos de qualquer tipo. Exemplo com arquivo PDF:
import nodemailer from 'nodemailer';import path from 'path';
async function sendWithAttachment() Também na biblioteca
Crypto-js para JavaScript (Node.js): guia completo com exemplos
Awilix para TypeScript: guia completo com exemplos
ErrorOr para C# (.NET): guia completo com exemplos práticos
Compression em JavaScript (Node.js): guia completo com exemplos