Когда пользователь оставляет заявку, оформляет заказ или сбрасывает пароль — он ждёт письмо. Если оно не приходит или попадает в спам — вы теряете клиента. Разберём, как настроить надёжную отправку email с сайта: от базового SMTP до специализированных сервисов Resend и Postmark.
Почему обычный SMTP — плохая идея для продакшена
Встроенный sendmail или SMTP через Gmail/Яндекс работает на этапе разработки, но в продакшене вы столкнётесь с проблемами:
- Лимиты отправки (Gmail — 500 писем/день, Яндекс — 500)
- Письма попадают в спам без правильных DNS-записей
- Нет аналитики: не видно, доставлено ли письмо, открыто ли оно
- Блокировка аккаунта при подозрительной активности
Для транзакционных писем (заявки, заказы, подтверждения) используйте специализированные сервисы.
SPF, DKIM, DMARC — фундамент доставляемости
Без этих DNS-записей ваши письма будут попадать в спам. Настройте их до подключения любого сервиса.
SPF (Sender Policy Framework)
Указывает, какие серверы имеют право отправлять письма от вашего домена.
# DNS TXT-запись для домена example.com
# Разрешаем отправку через Resend и Google
v=spf1 include:_spf.resend.com include:_spf.google.com ~all
DKIM (DomainKeys Identified Mail)
Цифровая подпись письма. Сервис отправки (Resend, Postmark) генерирует ключ — вы добавляете его как DNS-запись.
# DNS TXT-запись (пример для Resend)
# Имя: resend._domainkey.example.com
# Значение: v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUA...
DMARC (Domain-based Message Authentication)
Политика обработки писем, не прошедших SPF/DKIM проверку.
# DNS TXT-запись
# Имя: _dmarc.example.com
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; pct=100
Значение p=quarantine отправляет подозрительные письма в спам. После проверки отчётов можно перейти на p=reject для полной блокировки поддельных писем.
Сравнение сервисов транзакционных email
| Критерий | SMTP (Яндекс/Gmail) | Resend | Postmark |
|---|---|---|---|
| Бесплатный лимит | 500 писем/день | 3 000 писем/мес | 100 писем/мес |
| Стоимость | Бесплатно | $20/мес за 50К писем | $15/мес за 10К писем |
| API | Нет (только SMTP) | REST API + SDK | REST API + SDK |
| Доставляемость | Средняя | Высокая | Очень высокая |
| Аналитика | Нет | Открытия, клики, bounce | Открытия, клики, bounce, спам |
| Webhooks | Нет | Да | Да |
| React Email | Нет | Встроенная поддержка | Нет |
| Скорость доставки | 1 – 30 секунд | 1 – 3 секунды | < 1 секунды |
Цены актуальны на март 2026. Уточняйте на сайте сервиса.
Resend: отправка через API (Node.js)
Resend — современный сервис с отличным DX. Поддерживает React Email для вёрстки шаблонов.
npm install resend
// Node.js — отправка email через Resend
const { Resend } = require('resend');
const resend = new Resend(process.env.RESEND_API_KEY);
async function sendOrderConfirmation(to, orderData) {
const { data, error } = await resend.emails.send({
from: 'Your Company <orders@example.com>',
to: [to],
subject: `Заказ #${orderData.id} подтверждён`,
html: `
<h1>Спасибо за заказ!</h1>
<p>Ваш заказ <strong>#${orderData.id}</strong> принят в работу.</p>
<p>Сумма: ${orderData.amount.toLocaleString('ru-RU')} ₽</p>
<p>Мы свяжемся с вами в течение рабочего дня.</p>
`
});
if (error) {
console.error('Ошибка отправки:', error);
throw error;
}
return data;
}
Resend: отправка на Python
pip install resend
import resend
import os
resend.api_key = os.environ["RESEND_API_KEY"]
def send_notification(to: str, subject: str, html: str) -> dict:
params = resend.Emails.SendParams(
from_email="Your Company <notify@example.com>",
to=[to],
subject=subject,
html=html,
)
email = resend.Emails.send(params)
return email
Postmark: максимальная доставляемость
Postmark фокусируется исключительно на транзакционных письмах (не маркетинговых) и обеспечивает лучшую доставляемость в индустрии.
// Node.js — отправка через Postmark
const postmark = require('postmark');
const client = new postmark.ServerClient(process.env.POSTMARK_API_TOKEN);
async function sendEmail(to, subject, htmlBody) {
const result = await client.sendEmail({
From: 'notify@kalinkins.ru',
To: to,
Subject: subject,
HtmlBody: htmlBody,
MessageStream: 'outbound'
});
console.log(`Email отправлен: ${result.MessageID}`);
return result;
}
// Шаблоны Postmark — удобнее, чем inline HTML
async function sendWithTemplate(to, templateAlias, templateData) {
return client.sendEmailWithTemplate({
From: 'notify@kalinkins.ru',
To: to,
TemplateAlias: templateAlias,
TemplateModel: templateData,
MessageStream: 'outbound'
});
}
SMTP через Nodemailer (универсальный вариант)
Если нужна совместимость с любым SMTP-сервером:
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({
host: process.env.SMTP_HOST, // smtp.yandex.ru
port: 465,
secure: true,
auth: {
user: process.env.SMTP_USER, // your@yandex.ru
pass: process.env.SMTP_PASS // пароль приложения
}
});
async function sendMail(to, subject, html) {
const info = await transporter.sendMail({
from: '"Your Company" <mail@example.com>',
to,
subject,
html
});
console.log('Message sent:', info.messageId);
return info;
}
Обработка ошибок и bounce
Неправильная обработка отказов (bounce) и жалоб (spam complaints) ведёт к падению репутации домена:
- Hard bounce — адрес не существует. Удалите из базы сразу
- Soft bounce — временная проблема (ящик переполнен). Повторите через несколько часов, после 3 неудач — удалите
- Spam complaint — получатель нажал «Спам». Немедленно отпишите его
Resend и Postmark отправляют webhook-уведомления о bounce и complaints — обрабатывайте их автоматически.
Чек-лист перед запуском
- Настроены SPF, DKIM, DMARC записи в DNS
- Домен отправки подтверждён в сервисе (Resend/Postmark)
- Письма проверены через mail-tester.com (оценка 9+/10)
- Настроена обработка bounce и complaints
- Есть fallback: если основной сервис упал — письма уходят через резервный SMTP
- API-ключи в переменных окружения, не в коде
- Логирование отправок с messageId для отладки
Что выбрать
- Resend — лучший DX, щедрый бесплатный тариф, React Email. Оптимально для новых проектов на Next.js/Node.js
- Postmark — максимальная доставляемость и скорость. Для критичных уведомлений (оплата, безопасность)
- SMTP (Яндекс) — для MVP и проектов с минимальным количеством писем (до 100/день)
Есть идея? Реализуем
Разрабатываем проекты, которые решают задачи бизнеса — от лендинга до сложного сервиса. Расскажите о своей задаче, подберём решение.

