Отправка email на JavaScript (Node.js): nodemailer, sendgrid, mailgun

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

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

Начать курс

Отправка email на JavaScript (Node.js): nodemailer, sendgrid, mailgun

Отправка email — одна из ключевых функций современных веб-приложений: регистрация пользователей, сброс паролей, уведомления и маркетинговые рассылки. В экосистеме Node.js существует несколько проверенных решений, которые позволяют интегрировать почтовый функционал за считанные минуты. В этой статье мы подробно разберём три популярных инструмента: nodemailer, sendgrid и mailgun. Вы узнаете, как настроить SMTP, отправлять письма с вложениями и HTML-шаблонами, а также какие метрики отслеживать.

1. Nodemailer — универсальный SMTP-клиент

Nodemailer — самая популярная библиотека для отправки email в Node.js. Она поддерживает SMTP, SES, Sendmail и множество транспортов. Основные преимущества:

  • Простая настройка через SMTP-аккаунт (Gmail, Yandex, Mail.ru).
  • Поддержка вложений, inline-картинок, HTML-шаблонов.
  • Работа с очередями и пулами соединений.
  • Асинхронная отправка через async/await.

Установка и базовая отправка

npm install nodemailer
const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
  host: 'smtp.gmail.com',
  port: 587,
  secure: false, // true для 465 порта
  auth: {
    user: 'your-email@gmail.com',
    pass: 'your-password' // или app-password
  }
});

const mailOptions = {
  from: '"Отправитель" <your-email@gmail.com>',
  to: 'recipient@example.com',
  subject: 'Привет из Node.js!',
  text: 'Это тестовое письмо.',
  html: '<h1>Привет!</h1><p>Это HTML-версия.</p>'
};

const sendMail = async () => {
  const info = await transporter.sendMail(mailOptions);
  console.log('Письмо отправлено:', info.messageId);
};

sendMail().catch(console.error);

Отправка с вложениями

const mailOptions = {
  // ...основные поля
  attachments: [
    {
      filename: 'document.pdf',
      path: '/path/to/document.pdf'
    },
    {
      filename: 'image.png',
      content: fs.createReadStream('/path/to/image.png')
    }
  ]
};

Важно: для Gmail используйте пароль приложения или OAuth2.

2. SendGrid — облачный сервис для транзакционных писем

SendGrid (часть Twilio) предоставляет мощное API для отправки email с высокой доставляемостью. Подходит для стартапов и крупных проектов. Основные возможности:

  • API с ключами доступа (без SMTP).
  • Динамические шаблоны (Handlebars).
  • Аналитика: открытия, клики, отписки.
  • Бесплатный тариф до 100 писем/день.

Установка и отправка

npm install @sendgrid/mail
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const msg = {
  to: 'recipient@example.com',
  from: 'sender@example.com',
  subject: 'Транзакционное письмо',
  text: 'Текст письма',
  html: '<strong>HTML содержимое</strong>',
  attachments: [
    {
      content: 'base64encodedcontent',
      filename: 'invoice.pdf',
      type: 'application/pdf',
      disposition: 'attachment'
    }
  ]
};

sgMail.send(msg)
  .then(() => console.log('Email отправлен'))
  .catch(console.error);

Использование динамических шаблонов

const msg = {
  to: 'user@example.com',
  from: 'noreply@mysite.com',
  templateId: 'd-xxxxxxxxxxxxxxxx',
  dynamicTemplateData: {
    username: 'Иван',
    orderLink: 'https://mysite.com/order/123'
  }
};

3. Mailgun — для высоконагруженных проектов

Mailgun — ещё один облачный сервис, ориентированный на разработчиков. Отличается мощным API, поддержкой SMTP и встроенной валидацией email. Ключевые фишки:

  • Бесплатный тариф: 5 000 писем/мес.
  • API для отправки, логирования и ве

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