Email отправка на JavaScript (Node.js) — библиотеки и примеры кода

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

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

Начать курс

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

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

Зачем отправлять email из Node.js?

Node.js — это асинхронная среда выполнения JavaScript, которая отлично подходит для обработки большого количества запросов. Отправка писем через Node.js позволяет:

  • Автоматизировать уведомления пользователей;
  • Интегрировать email-рассылки с бэкендом;
  • Обрабатывать ошибки отправки в реальном времени;
  • Использовать один язык (JavaScript) для всего проекта.

Основные библиотеки для отправки email в Node.js

На сегодняшний день существует несколько проверенных библиотек. Рассмотрим самые популярные:

1. Nodemailer

Nodemailer — это де-факто стандарт для отправки email в Node.js. Библиотека поддерживает SMTP, встроенные шаблоны, вложения, HTML-письма и OAuth2. Она бесплатна и не требует внешних сервисов.

// Установка: npm install nodemailer
const nodemailer = require('nodemailer');

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

async function sendMail() {
    const info = await transporter.sendMail({
        from: '"Отправитель" <from@example.com>',
        to: 'to@example.com',
        subject: 'Привет из Node.js',
        text: 'Это тестовое письмо.',
        html: '<b>Это тестовое письмо.</b>'
    });
    console.log('Письмо отправлено:', info.messageId);
}
sendMail().catch(console.error);

2. SendGrid (через @sendgrid/mail)

SendGrid — облачный сервис для email-рассылок от Twilio. Библиотека @sendgrid/mail позволяет легко отправлять письма через API SendGrid. Подходит для масштабных проектов.

// Установка: npm install @sendgrid/mail
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey('YOUR_SENDGRID_API_KEY');

const msg = {
    to: 'recipient@example.com',
    from: 'sender@example.com',
    subject: 'Отправка через SendGrid',
    text: 'Привет из SendGrid!',
    html: '<strong>Привет из SendGrid!</strong>'
};

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

3. Mailgun.js

Mailgun — ещё один популярный сервис для разработчиков. Библиотека mailgun.js предоставляет удобный интерфейс для отправки писем и управления рассылками.

// Установка: npm install mailgun.js
const formData = require('form-data');
const Mailgun = require('mailgun.js');
const mailgun = new Mailgun(formData);

const mg = mailgun.client({
    username: 'api',
    key: 'YOUR_MAILGUN_API_KEY'
});

mg.messages.create('sandbox.mailgun.org', {
    from: 'Mailgun Sandbox <postmaster@sandbox.mailgun.org>',
    to: ['recipient@example.com'],
    subject: 'Привет от Mailgun',
    text: 'Тестовое письмо через Mailgun.'
})
.then(msg => console.log(msg))
.catch(err => console.error(err));

Настройка SMTP для отправки email

Если вы используете собственный почтовый сервер или аккаунт Gmail/Yandex, потребуется настроить SMTP. Вот пример для Gmail:

const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'your@gmail.com',
        pass: 'your-app-password' // Используйте пароль приложения
    }
});

Важно: Для Gmail включите двухфакторную аутентификацию и создайте пароль приложения. Для Yandex используйте порт 465 с SSL.

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

Nodemailer позволяет легко добавлять файлы:

const mailOptions = {
    from: 'sender@example.com',
    to: 'recipient@example.com',
    subject: 'Письмо с вложением',
    text: 'Во вложении файл.',
    attachments: [
        {
            filename: 'document.pdf',
            path: '/path/to/document.pdf'
        },
        {
            filename: 'image.png',
            content: fs.createReadStream('/path/to/image.png')
        }
    ]
};

Шаблоны писем и HTML

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