Отправка 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 для отправки, логирования и ве