Отправка email на TypeScript: обзор библиотек и инструментов
Отправка электронных писем — одна из ключевых задач веб-приложений. На TypeScript (и его рантайме Node.js) существует несколько зрелых решений. В этой статье мы разберём самые популярные библиотеки, их настройку и примеры использования с полной типизацией.
1. Nodemailer — универсальный SMTP-клиент
Nodemailer — самая популярная библиотека для отправки email в Node.js. Она поддерживает SMTP, встроенные транспорты (Sendmail, SES) и полностью совместима с TypeScript благодаря встроенным типам.
Установка
npm install nodemailer
npm install --save-dev @types/nodemailer
Пример отправки через 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,
},
});
await transporter.sendMail({
from: `"MyApp" <${process.env.EMAIL_USER}>`,
to: options.to,
subject: options.subject,
text: options.text,
html: options.html || options.text,
});
}
// Использование
sendEmail({
to: 'user@example.com',
subject: 'Привет из TypeScript!',
text: 'Это тестовое письмо.',
}).catch(console.error);
Работа с вложениями
await transporter.sendMail({
to: 'user@example.com',
subject: 'Файл во вложении',
text: 'Смотрите прикреплённый документ.',
attachments: [
{
filename: 'report.pdf',
path: './files/report.pdf',
},
],
});
2. SendGrid — облачный email-сервис
SendGrid (теперь часть Twilio) предоставляет мощный API для отправки транзакционных и маркетинговых писем. Для TypeScript есть официальный пакет с готовыми типами.
Установка
npm install @sendgrid/mail
Пример отправки с типизацией
import sgMail from '@sendgrid/mail';
sgMail.setApiKey(process.env.SENDGRID_API_KEY!);
interface SendGridMessage {
to: string;
from: string;
subject: string;
text: string;
html?: string;
}
async function sendViaSendGrid(msg: SendGridMessage): Promise<void> {
try {
await sgMail.send({
to: msg.to,
from: msg.from,
subject: msg.subject,
text: msg.text,
html: msg.html,
});
console.log('Email отправлен через SendGrid');
} catch (error) {
console.error('Ошибка SendGrid:', error);
}
}
// Использование
sendViaSendGrid({
to: 'client@example.com',
from: 'noreply@myapp.com',
subject: 'Подтверждение регистрации',
text: 'Добро пожаловать!',
html: '<h1>Добро пожаловать!</h1><p>Спасибо за регистрацию</p>',
});
3. AWS SES — для высоконагруженных систем
AWS Simple Email Service (SES) — корпоративное решение для отправки больших объёмов писем. Используется через SDK @aws-sdk/client-ses.
Установка
npm install @aws-sdk/client-ses
Пример с TypeScript
import { SESClient, SendEmailCommand } from '@aws-sdk/client-ses';
const sesClient = new SESClient({
region: 'us-east-1',
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY!,
secretAccessKey: process.env.AWS_SECRET_KEY!,
},
});
interface SESEmailParams {
to: string[];
from: string;
subject: string;
bodyText: string;
bodyHtml?: string;
}
async function sendViaSES(params: SESEmailParams): Promise<void> {
const command = new SendEmailCommand({
Destination: {
ToAddresses: params.to,
},
Message: {
Subject: { Data: params.subject },
Body: {
Text: { Data: params.bodyText },
Html: params.bodyHtml ? { Data: params.bodyHtml } : undefined,
},
},
Source: params.from,
});
await sesClient.send(command);
console.log('Email отправлен через AWS SES');
}
// Использование
sendViaSES({
to: ['user@example.com'],
from: 'noreply@myapp.com',
subject: 'Уведомление',
bodyText: 'Ваш заказ подтверждён.',
});
4. mailgun.js — лёгкая альтернатива
Mailgun — ещё один популярный сервис с REST API. Пакет mailgun.js имеет типизацию и прост
Также в библиотеке
Криптография в Swift: шифрование и хеширование для iOS/macOS
Swift Data для Swift: полное руководство с примерами
gRPC для Swift (iOS/macOS): библиотеки, настройка и примеры кода
Работа с Excel в JavaScript (Node.js): библиотеки и инструменты