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')
}
]
};