Быстрые ссылки

Не приходят заявки с сайта: что проверить и как исправить

Форма показывает «Спасибо, сообщение отправлено», а письма нет. Или письма приходят через раз. Или приходят, но в спам. Это одна из самых дорогих поломок: сайт выглядит рабочим, а заявки теряются неделями, пока кто-то не позвонит и не спросит, почему ему не ответили. Разберу, как устроена отправка почты с сайта и что проверить по порядку.

Как сайт отправляет письма

По умолчанию WordPress (и большинство CMS) отправляют почту через PHP-функцию mail(). Она передаёт письмо почтовой программе на сервере хостинга, а та пытается доставить его получателю. Проблема в том, что:

  • письмо уходит с адреса вроде wordpress@ваш-домен.by, хотя сервер хостинга не уполномочен отправлять почту от имени вашего домена;
  • у домена нет записей SPF и DKIM, подтверждающих, что сервер имеет право отправлять;
  • IP-адрес хостинга может быть в чёрных списках из-за соседей по серверу.

Почтовые сервисы — Gmail, Яндекс, Mail.ru — видят письмо от домена без подтверждения и отправляют его в спам или отбрасывают молча.

Шаг 1. Убедитесь, что форма вообще отправляет

В Contact Form 7 после отправки появляется сообщение. Варианты:

  • зелёная рамка «Спасибо за сообщение» — CF7 передал письмо в mail(), дальше проблема в доставке;
  • оранжевая рамка «При отправке сообщения произошла ошибка» — mail() вернул ошибку, на хостинге не работает отправка почты или заблокирована функция;
  • ничего не происходит, крутится индикатор — JavaScript-ошибка или блокировка REST API. Откройте консоль браузера (F12) и посмотрите ошибки.

Последний случай часто бывает, когда плагин безопасности закрыл REST API, через который CF7 отправляет форму.

Шаг 2. Проверьте настройки формы

В Contact Form 7 — Контактные формы — ваша форма — вкладка «Письмо»:

  • Кому — правильный адрес, без опечаток.
  • От кого — адрес на вашем домене, например site@ваш-домен.by. Не ставьте сюда адрес посетителя из формы ([your-email]) — это подделка отправителя, такие письма режутся почти всегда.
  • Дополнительные заголовки — сюда добавьте Reply-To: [your-email], тогда «Ответить» в почте будет отвечать клиенту.

CF7 сам подсказывает проблемы: если поле «От кого» не на домене сайта, под ним появится предупреждение.

Шаг 3. Настройте отправку через SMTP

Это главное решение. Вместо mail() сайт подключается к настоящему почтовому серверу с логином и паролем — как почтовая программа на компьютере.

Варианты почтового сервера:

  • почта на домене у вашего хостинга;
  • Яндекс 360 для бизнеса или Google Workspace, если почта домена там;
  • транзакционные сервисы (для сайтов с большим количеством писем).

Для WordPress подойдёт плагин WP Mail SMTP или аналогичный. Настройки для почты на Яндекс 360:

SMTP-сервер: smtp.yandex.ru
Порт: 465
Шифрование: SSL
Логин: site@ваш-домен.by
Пароль: пароль приложения из настроек Яндекс ID
От кого: site@ваш-домен.by

Пароль именно приложения, а не основной пароль от почты. Его создают в настройках безопасности аккаунта.

Если не хочется ставить плагин, SMTP настраивается небольшим кодом в functions.php дочерней темы:

add_action( 'phpmailer_init', function ( $m ) {
    $m->isSMTP();
    $m->Host       = 'smtp.yandex.ru';
    $m->Port       = 465;
    $m->SMTPSecure = 'ssl';
    $m->SMTPAuth   = true;
    $m->Username   = 'site@example.by';
    $m->Password   = SMTP_PASS;
    $m->From       = 'site@example.by';
    $m->FromName   = 'Сайт example.by';
} );

А пароль — константой в wp-config.php: define( ‘SMTP_PASS’, ‘…’ );. Так он не лежит в файлах темы.

Шаг 4. SPF, DKIM и DMARC

Эти DNS-записи говорят почтовым сервисам, кто имеет право отправлять почту от вашего домена.

SPF — TXT-запись на домене. Пример для Яндекс 360:

v=spf1 include:_spf.yandex.net ~all

Если письма уходят и с сервера хостинга, добавьте его: include от хостинга или ip4:адрес-сервера. Запись SPF на домене должна быть одна, все источники — в ней.

DKIM — подпись писем. Публичный ключ выдаёт почтовый сервис, его добавляют TXT-записью вида mail._domainkey.

DMARC — правило, что делать с письмами, не прошедшими проверку. Для начала достаточно:

v=DMARC1; p=none; rua=mailto:postmaster@ваш-домен.by

Проверить, что всё работает, просто: отправьте заявку на Gmail, откройте письмо, «Показать оригинал». Там должно быть SPF: PASS и DKIM: PASS.

Шаг 5. Антиспам, который не режет нормальные заявки

Спам через формы — вторая сторона проблемы. Но слишком агрессивная защита теряет нормальные заявки.

  • reCAPTCHA v3 работает невидимо, но иногда отсекает реальных людей с VPN или старыми браузерами. Если включаете — следите, сколько отправок отклоняется.
  • Скрытое поле (honeypot) — простое и надёжное. Боты заполняют все поля, люди не видят скрытое. Для CF7 есть готовые плагины.
  • Проверка времени — форму, заполненную быстрее чем за 2–3 секунды, отправил бот.
  • Akismet для CF7 проверяет содержимое по базе спама.

Я обычно ставлю honeypot и проверку времени — их достаточно для большинства сайтов, и они не мешают людям.

Шаг 6. Не держите заявки только в почте

Даже идеально настроенная почта иногда сбоит. Сохраняйте заявки ещё и на сайте:

  • плагин Flamingo от автора CF7 хранит все отправки в админке;
  • можно дублировать заявки в Telegram-бота;
  • для своих обработчиков — запись в файл вне публичной папки или в базу.

Тогда, даже если письмо потерялось, заявка не пропадёт.

Шаг 7. Проверка

После настроек:

  1. Отправьте заявку с формы на сайте сами.
  2. Проверьте, что письмо пришло во «Входящие», а не в спам, на Gmail и на Яндекс.
  3. Ответьте на письмо и убедитесь, что ответ уходит клиенту, а не на адрес сайта.
  4. Повторяйте проверку раз в неделю или настройте автоматическую.

Частые ловушки

  • Хостинг блокирует исходящие соединения на порты 25, 465, 587. Уточните у поддержки, какой порт открыт.
  • В DNS две записи SPF — это ошибка, учитывается ни одна.
  • Форма отправляет на адрес на том же домене, а почта домена у другого провайдера — сервер хостинга пытается доставить письмо локально и не находит ящик. Решается SMTP или отключением локальной доставки в панели хостинга.
  • После переноса сайта на новый хостинг перестала работать почта — забыли перенести настройки SMTP или изменить SPF. Об этом в статье «Перенос сайта на другой хостинг».

Если не хочется разбираться с DNS и SMTP, напишите мне: настройка отправки и проверка доставки — типовая задача в рамках доработки сайта.

Как проверить, ушло ли письмо с сервера

Если доступ к серверу есть, это видно в логе почтовой программы. На серверах с Postfix:

grep "to=<manager@example.by>" /var/log/mail.log | tail -n 5

В строке будет статус: status=sent — письмо принято сервером получателя; status=deferred — временная ошибка, сервер попробует снова; status=bounced — письмо отклонено, причина указана рядом. Если строк нет вовсе, письмо не покинуло сайт — проблема в настройках формы или в PHP.

На виртуальном хостинге такой лог обычно недоступен, но поддержка может посмотреть его по времени отправки и адресу получателя.

Отправка заявок в Telegram

Дублирование заявок в Telegram страхует от проблем с почтой и ускоряет ответ: менеджер видит заявку на телефоне сразу. Схема простая:

  1. Создать бота через @BotFather и получить токен.
  2. Добавить бота в рабочий чат и узнать идентификатор чата.
  3. После отправки формы сайт делает запрос к API Telegram с текстом заявки.

Для Contact Form 7 это несколько строк в дочерней теме:

add_action( 'wpcf7_mail_sent', function ( $form ) {
    $s = WPCF7_Submission::get_instance();
    if ( ! $s ) return;
    $d = $s->get_posted_data();
    $text = "Заявка с сайта\nИмя: " . ( $d['your-name'] ?? '' ) . "\nТелефон: " . ( $d['your-tel'] ?? '' );
    wp_remote_post( 'https://api.telegram.org/bot' . TG_TOKEN . '/sendMessage', array(
        'body' => array( 'chat_id' => TG_CHAT, 'text' => $text ),
        'timeout' => 5,
    ) );
} );

Токен и идентификатор чата храните константами в wp-config.php, а имена полей замените на те, что используются в вашей форме.

Заявки приходят, но с опозданием

Если письма доходят через час или к утру, это обычно «серый список» на стороне получателя или очередь на сервере хостинга. Сервер получателя временно отклоняет письмо от незнакомого отправителя, и повторная попытка происходит через десятки минут. SMTP через настоящий почтовый сервис с корректными SPF и DKIM решает и эту проблему.

Чек-лист: форма и почта

  1. Форма показывает сообщение об успешной отправке, в консоли браузера нет ошибок.
  2. Поле «От кого» — адрес на домене сайта, ответ клиенту идёт через Reply-To.
  3. Отправка через SMTP с авторизацией.
  4. На домене одна запись SPF, есть DKIM, добавлен DMARC.
  5. Тестовое письмо на Gmail показывает SPF: PASS и DKIM: PASS.
  6. Антиспам не режет живые заявки.
  7. Заявки дублируются в базу, Telegram или CRM.
  8. Раз в неделю — контрольная заявка.

Частые вопросы

Заявки уходят в спам только у одного менеджера — что это?

Скорее всего, в его почте сработал фильтр или есть правило. Добавьте адрес отправителя в контакты и проверьте правила сортировки. Если проблема у всех — проблема в SPF и DKIM.

Как узнать, сколько заявок потерялось?

Если заявки дублируются в базу, сравните её с почтой. Если нет — точного ответа уже не будет, поэтому дублирование стоит включить сразу.

Нужна помощь?

Если не хочется разбираться самому или не получилось — напишите мне. Посмотрю сайт и скажу, что сломалось и сколько стоит исправить.

Доработка сайтаНаписать в TelegramНаписать в Viber

Leave a comment