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