Надёжность доставки форм на сайте: настройка SMTP, доставляемость, повторные попытки и логи

«Успешная отправка» формы на сайте не значит, что клиент действительно получил ваше письмо. WordPress по умолчанию отправляет почту через PHP mail() — без SMTP-аутентификации и подписи домена, поэтому доставляемость изначально...

表单投递可靠性:从提交到收件箱的四段链路Form Delivery Reliability: a four-stage pipeline from submit to inbox PHP mail() 不是邮件服务 —— 不配置 SMTP 和域名认证,投递率天然低于 60%PHP mail() is not a mail service — without SMTP and auth, delivery sits below 60% 环节Stage 关键配置Key config 失败信号Failure signal 恢复动作Recovery 1 表单提交1. Submit 字段校验 + 反垃圾Field validate + anti-spam WP Forms / Fluent FormsWP Forms / Fluent Forms honeypot + reCAPTCHAhoneypot + reCAPTCHA JS 报错 / 500JS error / 500 前端不提交Frontend never posts 关闭 JS 校验兜底Server-side validate 检查 PHP 错误日志Check PHP error log 常见死法一:端口 25 被主机商封禁,SMTP 发不出去Failure 1: port 25 blocked by host, SMTP cannot connect 换 587 或 465 端口,用 TLS/SSL 加密,不要用 25Use 587 or 465 with TLS/SSL, never plain 25 常见死法二:SPF/DKIM 未配置,邮件进垃圾箱Failure 2: SPF/DKIM missing, mail lands in spam DNS 添加 SPF TXT + DKIM CNAME + DMARC 记录Add SPF TXT + DKIM CNAME + DMARC in DNS 投递率合格线:收件箱到达率 ≥ 95%,硬 bounce ≤ 2%,软 bounce ≤ 5%Healthy: inbox rate ≥ 95%, hard bounce ≤ 2%, soft bounce ≤ 5% 失败重试:指数退避,第1/5/15/60分钟各试一次,最多4次,仍失败则告警Retry: backoff at 1/5/15/60 min, max 4 attempts, then alert 日志保留 30 天:记录 from/to/subject/响应码/重试次数,每周抽查 5 封Keep logs 30 days: from/to/subject/code/retries, sample 5 weekly 不要相信”已发送”提示 —— SMTP 返回 250 只是对方服务器接收,不等于进了收件箱“Sent” is not delivered — SMTP 250 means accepted, not inbox
Четыре этапа доставки формы: отправка, SMTP-ретрансляция, ретрансляция через ESP, входящие — и два типичных способа провалиться

Надёжность доставки форм на сайте: настройка SMTP, доставляемость, повторные попытки и логи

Сначала вывод:«Успешная отправка» формы на сайте не значит, что клиент действительно получил ваше письмо. WordPress по умолчанию отправляет почту через PHP mail() — без SMTP-аутентификации и подписи домена, поэтому доставляемость изначально ниже 60%. Правильный подход — подключить выделенный сервис SMTP-ретрансляции (SendGrid/Mailgun/Postmark), настроить три DNS-записи SPF/DKIM/DMARC и задать 4 повторные попытки с экспоненциальной задержкой. Норма доставляемости — попадание во входящие ≥ 95%, жёсткие отказы (hard bounce) ≤ 2%.

1. Почему PHP mail() не заслуживает доверия

Многие владельцы сайтов думают: нажал «Отправить», увидел страницу подтверждения — и всё в порядке. На самом деле стандартный wp_mail() в WordPress использует встроенную функцию PHP mail(): без аутентификации отправителя, без TLS-шифрования, без отдельного пула IP. Такие письма с большой вероятностью попадут в спам в Gmail и Outlook.

Проблема не в плагине, а на уровне протокола. mail() передаёт письмо локальному MTA (агенту передачи почты), а тот подключается к MX-серверу получателя напрямую через порт 25. Но большинство облачных хостингов (Aliyun, Tencent Cloud, AWS) по умолчанию блокируют исходящий порт 25 для борьбы со спамом. В итоге форма показывает успех, а письмо вообще не уходит.

Контринтуитивный вывод:Чем «проще» способ отправки, тем больше теряете заказов. Без SMTP-плагина вы как будто экономите полчаса на настройке, но на деле можете терять от 20% до 40% заявок в месяц — и даже не узнаете об этом, потому что на странице отправки горит зелёная галочка. О том, как спроектировать поля формы, чтобы совместить конверсию и фильтрацию, читайте в Проектирование полей формы заявки и конверсия.

Способ отправки Средняя доставляемость Сложность настройки Для чего подходит
PHP mail() (по умолчанию) от 40% до 60% Без настройки Не подходит для рабочего сайта
Локальный SMTP хостинга 60–75% Низкая Для тестовой среды
Сторонний SMTP-ретранслятор (бесплатный тариф) 85%–92% Средний До 5000 писем в месяц
Специализированный сервис транзакционной почты Более 95% Средний и выше Свыше 5000 писем в месяц

2. Настройка SMTP: выбор плагина и параметры

Для настройки SMTP в WordPress не нужно править код — достаточно установить плагин. Основных вариантов три: WP Mail SMTP (самый популярный, понятный интерфейс), FluentSMTP (открытый и бесплатный, поддерживает переключение между провайдерами при сбое), Post SMTP (самые мощные логи). Выберите один — не ставьте два сразу, они конфликтуют.

Семь ключевых параметров: SMTP-хост, порт (587 или 465, не 25), шифрование (TLS или SSL), имя пользователя, пароль или API-ключ, адрес отправителя и имя отправителя. Адрес отправителя должен совпадать с вашим доменом, например noreply@yourdomain.com. Отправлять с Gmail или QQ-почты нельзя: записи SPF не совпадут, и письма сразу уйдут в спам.

Пример: вы используете SendGrid как SMTP-релей. В поле хоста укажите smtp.sendgrid.net, порт 587, шифрование TLS, имя пользователя всегда apikey, а в поле пароля вставьте API-ключ, сгенерированный в панели SendGrid. В адресе отправителя укажите noreply@yourdomain.com, затем добавьте три записи в панели DNS — об этом в следующем разделе.

Параметр Правильное значение Частая ошибка
SMTP-хост smtp.sendgrid.net / smtp.mailgun.org localhost или IP локальной машины
Порт 587 (TLS) или 465 (SSL) 25 — его блокируют хостинг-провайдеры
Шифрование TLS (587) или SSL (465) «Без шифрования» — данные идут открытым текстом
Имя пользователя В SendGrid всегда apikey, в Mailgun — postmaster@mg.xxx Свой адрес электронной почты
Отправитель noreply@yourdomain.com Личная почта Gmail или QQ
Имя отправителя Английское название компании и отдел Пустое поле или кракозябры вместо кириллицы

3. Аутентификация домена: три записи SPF, DKIM и DMARC

Настроить SMTP-плагин — только первый шаг. Почему почтовый сервер получателя должен верить, что письмо отправили именно вы? Ответ — три записи DNS: SPF (какие серверы вправе отправлять письма от вашего имени), DKIM (цифровая подпись письма от подмены) и DMARC (что делать с письмами, не прошедшими проверку). Без любой из них доставляемость не вырастет.

SPF — это запись TXT примерно такого вида: v=spf1 include:sendgrid.net ~all. Она означает: «отправлять письма от моего домена вправе только серверы SendGrid, все остальные получают soft fail». DKIM — запись CNAME: SMTP-провайдер публикует открытый ключ, а получатель проверяет с его помощью подпись. DMARC — тоже запись TXT, начинается с v=DMARC1. Сначала поставьте p=none и понаблюдайте неделю, затем переключитесь на p=quarantine.

Как проверить: введите свой домен в MXToolbox или в Checkup из Google Admin Toolbox. Проверка пройдена, только если все три пункта зелёные. Если SPF показывает «not found», а DKIM — «no key», добавьте записи в панели DNS, подождите 15 минут и проверьте снова. Как совместить соответствие требованиям к домену с GDPR, читайте в Комплаенс-основа для выхода на зарубежные рынки.

Тип записи Что даёт Минимальная настройка Инструмент проверки
SPF (TXT) Какие серверы вправе отправлять письма v=spf1 include:провайдер ~all Проверка SPF в MXToolbox
DKIM (CNAME/TXT) Цифровая подпись письма от подмены Запись selector от провайдера Проверка ключа DKIM Core
DMARC (TXT) Политика и сбор отчётов v=DMARC1; p=none; rua=почта Google Admin Toolbox
MTA-STS (TXT) Принудительное шифрование TLS v=STSv1; id=20260921 MXToolbox MTA-STS

4. Метрики доставляемости и повторные попытки при сбоях

Настроить SMTP и DNS — это только начало, дальше нужно следить за метриками. Три ключевых показателя: доля доставки во входящие (процент писем, попавших в inbox, а не в спам), hard bounce rate (адрес не существует, домен не существует — постоянная ошибка) и soft bounce rate (ящик переполнен, сервер занят — временная ошибка). Здоровые значения: доставка ≥ 95%, hard bounce ≤ 2%, soft bounce ≤ 5%.

Повторные попытки при сбое нельзя оставлять на настройки плагина по умолчанию. Плагины форм WordPress по умолчанию «отправил и забыл», и при сбое страница даже не покажет ошибку. Правильный подход — добавить слой повторных попыток: после первой неудачи ждём 1 минуту, после второй — 5 минут, после третьей — 15 минут, после четвёртой — 60 минут. Если все четыре попытки провалились, срабатывает оповещение (на резервную почту или в корпоративный мессенджер), а заявка сохраняется в базе для ручной досылки.

Пример из практики: клиент отправляет форму в Германии в 23:00 (у вас в Пекине 6 утра), а SendGrid как раз проводит обслуживание, и SMTP возвращает временную ошибку. Без повторных попыток заявка потерялась бы. Благодаря экспоненциальной задержке четвёртая попытка через 60 минут проходит успешно, и клиент, проснувшись утром, получает ваше автоответное письмо. Как определить скорость первого ответа, см.SLA первого ответа на запрос и конверсия.

Показатель Норма Порог оповещения Действие
Доля доставки во входящие ≥ 95% ниже 90% Проверить логи SPF/DKIM
Hard bounce rate ≤ 2% Выше 5% Очистить список недействительных адресов
Soft bounce rate ≤ 5% Выше 10% Проверить статус SMTP-провайдера
Успешность повторных попыток ≥ 80% Ниже 50% Переключиться на резервный SMTP-канал
Среднесуточное число отправок Базовая линия ±20% Падение более чем на 50% Проверить, нет ли ошибок JS на фронтенде

V. Логирование и еженедельная самопроверка

Без логов не будет основы для диагностики. Плагин Post SMTP ведёт таблицу логов писем, где фиксируются from, to, subject, время отправки, код ответа SMTP и число повторных попыток. У FluentSMTP есть аналогичная функция. Логи нужно хранить минимум 30 дней, затем автоматически удалять, чтобы не раздувать базу данных.

Раз в неделю проводите самопроверку: возьмите 5 последних отправленных писем и посмотрите, относятся ли коды ответа SMTP к серии 250 (250 — успех, 4xx — временная ошибка, 5xx — постоянная ошибка). Заодно отправьте тестовое письмо себе на Gmail, нажмите «Показать оригинал» и проверьте, все ли три пункта SPF=pass, DKIM=pass, DMARC=pass зелёные. Если хотя бы один fail — сразу проверяйте DNS.

Ещё один момент, который легко упустить: сам плагин форм тоже должен вести логи. Если после отправки пользователем JS выдал ошибку и запрос вообще не ушёл, в логах SMTP записи не будет. Поэтому нужно на уровне сервера добавить мониторинг Nginx access log и считать количество POST-запросов к /wp-admin/admin-ajax.php (или к эндпоинту REST API). Если в какой-то день оно резко падает более чем на 50%, значит, проблема на фронтенде. Как настроить мониторинг сайта, см.Мониторинг сайта и оповещения.

Уровень логирования Что фиксируем Срок хранения Способ просмотра
Лог отправки форм Значения полей, IP, UA, метка времени 90 дней Панель плагина / таблица в базе данных
Лог отправки SMTP Коды ответа, число повторов, текст ошибки 30 дней Страница логов SMTP-плагина
Логи доставки ESP Открытия, клики, жалобы, отказы Навсегда в панели провайдера Панель SendGrid/Mailgun
Логи доступа Nginx Число POST-запросов, распределение кодов ответа 14 дней grep access.log на сервере

FAQ: частые вопросы

Обязательно ли ставить SMTP-плагин для форм WordPress, нельзя ли обойтись PHP mail()?
На боевом сайте обязательно. У PHP mail() нет аутентификации отправителя, а порт 25 заблокирован почти на всех облачных хостингах, поэтому реальная доставляемость — всего 40–60%, и масса заявок тихо уходит в спам. Поставьте WP Mail SMTP или FluentSMTP, подключите бесплатный тариф SendGrid/Mailgun — настройка занимает полчаса, а доставляемость вырастает выше 90%. На тестовом сайте mail() можно использовать временно, но перед запуском обязательно заменить.
Нужно ли настраивать все три записи — SPF, DKIM и DMARC, или хватит только SPF?
Одного SPF недостаточно. SPF проверяет только IP сервера отправки, DKIM подтверждает, что содержимое письма не подменили, а DMARC говорит получателю, что делать с письмом, не прошедшим проверку. Не хватает одной из трёх — Gmail снижает оценку безопасности почты. Минимальная настройка: SPF TXT + DKIM CNAME (даёт провайдер) + DMARC сначала с p=none на неделю наблюдения, потом переключить на p=quarantine. После настройки проверьте в MXToolbox — готово, только когда все три пункта зелёные.
Какой SMTP-порт выбрать — 25, 587 или 465?
Выбирайте 587 или 465, не 25. Порт 25 — традиционный порт отправки без шифрования, и крупные облачные хостинги (Aliyun, Tencent Cloud, AWS и другие) по умолчанию блокируют исходящий порт 25 для борьбы со спамом: даже если укажете, соединения не будет. Порт 587 использует STARTTLS для шифрования, порт 465 — сразу SSL; подходят оба. Лучше 587, потому что современные клиенты лучше всего поддерживают STARTTLS. Если хостинг дополнительно закрыл 587, переходите на 465.
Как проверить доставляемость и где посмотреть, попало письмо во входящие или в спам?
Смотрите по трём каналам сразу. Первый — коды ответа в логах SMTP-плагина: серия 250 означает успешный приём, 4xx/5xx — ошибку. Второй — сводная статистика в панели SendGrid/Mailgun: там видно жёсткие и мягкие отказы, долю жалоб. Третий — собственный тест: отправьте по письму на Gmail, Outlook и Yahoo и посмотрите, в какую папку они попали. Точное место во входящих покажет только сторонний инструмент (например, Mail-Tester) по баллам; проверять раз-два в месяц на сайт достаточно.
Письмо после отправки формы не пришло — как быстрее всего найти причину?
Проверяйте по четырём уровням. Первый: откройте Console в браузере — есть ли ошибки JS, уходит ли запрос. Второй: загляните в журнал писем SMTP-плагина в админке WordPress — есть ли там эта запись и какой код ответа. Третий: посмотрите Nginx access.log и убедитесь, что POST-запрос дошёл до сервера. Четвёртый: в панели SMTP-провайдера проверьте события доставки этого письма. Где цепочка оборвалась, там и чините, не перескакивайте через уровни. Частые причины — закрытый порт или ненастроенный SPF.
Хватит ли бесплатного лимита SMTP и когда пора платить?
У SendGrid бесплатный тариф — 100 писем в день, у Mailgun — 5000 в месяц, у Postmark бесплатного тарифа нет, но есть пробный период на 100 писем. На B2B-сайте с самостоятельной продажей через форму обычно приходит 100–500 заявок в месяц; вместе с автоответами и уведомлениями расходуется до 2000 писем в месяц, так что бесплатного тарифа хватает. Переходите на платный тариф, когда отправка превышает 5000 писем в месяц или бесплатный тариф начинает ограничивать скорость. Платные тарифы стартуют примерно с 19,95 $/мес у SendGrid и с 35 $/мес у Mailgun.

В заключение

Доставка писем с форм — самый незаметный источник потерь на сайте с самостоятельной продажей. Большинство владельцев следят за трафиком и конверсией, но ни разу не проверяли, доходит ли письмо до клиента после “успешной отправки”. Один раз настроить SMTP и три записи DNS — два часа работы, а потери заказов в месяц сокращаются больше чем вдвое.

Три шага к результату. Первый: на этой неделе поставьте SMTP-плагин и подключите бесплатный тариф SendGrid или Mailgun. Второй: добавьте в панели DNS записи SPF, DKIM и DMARC и проверьте через MXToolbox, чтобы все были зелёными. Третий: настройте 4 повтора с экспоненциальной задержкой и раз в неделю проверяйте статус доставки у 5 случайных писем. После этих трёх дел у надёжности доставки форм появится минимальная гарантия.

Запомните одну фразу: зелёная галочка на форме означает лишь “сервер получил”, а не “клиент увидел” — между ними три преграды: SMTP, DNS и папка спама.

crater
crater Эксперт Crater

Официальный аккаунт организации · crater Crater

环形山 (Crater) — компания, которая помогает выходить на зарубежные рынки: разработка сайтов на WordPress, Google SEO и комплексный рост в GEO. Мы работаем с умными устройствами, промышленным оборудованием, SaaS и новой энергетикой.

Возможности продуктаБелая книга по методологииОтраслевые отчёты
965篇分享
78статей в базе знаний