Отправка email на TypeScript: библиотеки и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Отправка 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 имеет типизацию и прост

Рекомендаций