Email отправка на TypeScript: полное руководство
TypeScript — это строго типизированное надмножество JavaScript, которое активно используется в современных веб-приложениях. Отправка email — одна из ключевых задач для бэкенда, уведомлений и маркетинга. В этой статье мы подробно разберём несколько библиотек для отправки email на TypeScript, включая настройку, отправку простых и HTML-писем, а также работу с вложениями.
Почему TypeScript для отправки email?
TypeScript добавляет типизацию, что снижает количество ошибок на этапе разработки. При отправке email это особенно важно: правильные типы для SMTP-хоста, порта, учётных данных и опций письма помогают избежать runtime-ошибок. Кроме того, TypeScript поддерживает современные async/await конструкции, что делает код чище и понятнее.
Основные библиотеки для отправки email на TypeScript
- nodemailer — самая популярная библиотека для Node.js, полностью совместима с TypeScript. Поддерживает SMTP, Sendmail, вложения, HTML-шаблоны.
- @sendgrid/mail — официальный клиент SendGrid для Node.js с TypeScript-типами. Использует API SendGrid, не требует SMTP.
- aws-sdk (SES) — Amazon Simple Email Service. Мощное решение для массовых рассылок, интеграция с AWS.
- emailjs — лёгкая библиотека с поддержкой TypeScript, но менее популярна.
Установка и настройка nodemailer с TypeScript
Установите пакеты через npm:
npm install nodemailer
npm install @types/nodemailer --save-dev
Базовый пример отправки email через SMTP (Gmail, Yandex, Mail.ru и т.д.):
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 для 465 порта
auth: {
user: 'your-email@gmail.com',
pass: 'your-password-or-app-password',
},
});
const mailOptions = {
from: '"Ваше имя" <your-email@gmail.com>',
to: options.to,
subject: options.subject,
text: options.text,
html: options.html,
};
const info = await transporter.sendMail(mailOptions);
console.log('Письмо отправлено:', info.messageId);
}
// Использование
sendEmail({
to: 'user@example.com',
subject: 'Привет из TypeScript!',
html: '<h1>Проверка</h1><p>Это HTML-письмо.</p>',
});
Важно: Для Gmail включите "Доступ к ненадёжным приложениям" или используйте пароль приложения (App Password). Для продакшена лучше использовать OAuth2.
Отправка email через SendGrid на TypeScript
SendGrid предоставляет готовый API, не требующий SMTP. Установка:
npm install @sendgrid/mail
Пример отправки:
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 отправлен через SendGrid');
} catch (error) {
console.error('Ошибка отправки:', error);
}
}
sendWithSendGrid({
to: 'user@example.com',
from: 'sender@yourdomain.com',
subject: 'Тест SendGrid + TypeScript',
html: '<p>Это сообщение отправлено через SendGrid API.</p>',
});
Отправка email с вложениями на TypeScript
nodemailer поддерживает вложения любого типа. Пример с PDF-файлом:
import nodemailer from 'nodemailer';
import path from 'path';
async function sendWithAttachment() {
const transporter = nodemailer.createTransport({ /* настройки SMTP */ });
await transporter.sendMail({
from: 'sender@example.com',
to: 'recipient@example.com',
subject: 'Письмо с вложением',
text: 'См. прикреплённый файл.',
attachments: [
{
filename: 'report.pdf',
path: path.join(__dirname, 'files', 'report.pdf'),
contentType: 'application/pdf',
},
{
filename: 'image.png',
content: Buffer.from('iVBORw0KGgo...', 'base64'), // или из файла
encoding: 'base64',
},
],
});
}