Отправка email на JavaScript (Node.js): Nodemailer, SendGrid, Mailgun

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

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

Начать курс

Email отправка на JavaScript (Node.js): Полное руководство

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

Зачем нужна отдельная библиотека для отправки email?

Node.js не имеет встроенных средств для работы с SMTP-протоколом или REST API почтовых сервисов. Поэтому разработчики используют специализированные библиотеки, которые берут на себя:

  • Формирование корректных MIME-сообщений (включая HTML, вложения, inline-изображения);
  • Управление очередями и повторными попытками при ошибках сети;
  • Безопасное хранение и передачу учётных данных;
  • Поддержку популярных почтовых провайдеров (Gmail, Yandex, Mail.ru, корпоративные серверы).

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

Nodemailer — это де-факто стандарт для отправки email в Node.js. Он поддерживает как классический SMTP, так и интеграцию с OAuth2. Библиотека работает без дополнительных зависимостей и позволяет отправлять письма через любой SMTP-сервер.

Установка

npm install nodemailer

Базовый пример отправки через SMTP Gmail

const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 587,
    secure: false, // true для 465, false для остальных
    auth: {
        user: 'your-email@gmail.com',
        pass: 'your-app-password' // Используйте пароль приложения, не основной!
    }
});

const mailOptions = {
    from: '"Sender Name" <your-email@gmail.com>',
    to: 'recipient@example.com',
    subject: 'Привет из Node.js',
    text: 'Это простое текстовое письмо.',
    html: '<b>Это жирный текст в HTML</b>'
};

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log('Ошибка:', error);
    }
    console.log('Письмо отправлено: %s', info.messageId);
});

Работа с вложениями

mailOptions.attachments = [
    {   // файл на диске
        filename: 'document.pdf',
        path: '/path/to/document.pdf'
    },
    {   // содержимое как строка
        filename: 'notes.txt',
        content: 'Текстовый файл, созданный на лету'
    }
];

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

SendGrid (сейчас часть Twilio) предоставляет мощный REST API и гарантирует высокую доставляемость. Библиотека @sendgrid/mail упрощает интеграцию. Подходит для проектов, где важна аналитика открытий, кликов и отписок.

Установка

npm install @sendgrid/mail

Пример отправки

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

const msg = {
    to: 'recipient@example.com',
    from: 'sender@yourdomain.com', // Домен должен быть верифицирован в SendGrid
    subject: 'Уведомление от сервиса',
    text: 'Текстовая версия письма',
    html: '<h1>Привет!</h1><p>Это письмо отправлено через SendGrid.</p>',
};

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

Отправка с динамическими шаблонами

const msg = {
    to: 'user@example.com',
    from: 'test@example.com',
    templateId: 'd-xxxxxxxxxxxxxxxxxxxx', // ID шаблона из SendGrid
    dynamicTemplateData: {
        username: 'Иван',
        verificationLink: 'https://site.com/verify?token=abc123'
    }
};

3. Mailgun — гибкий API с мощной аналитикой

Mailgun — это сервис, ориентированный на разработчиков. Он предоставляет простой REST API, детальную статистику и встроенную поддержку email-валидации. Библиотека mailgun.js обеспечивает удобную работу.

Установка

npm install mailgun.js form-data
                
    
    

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