Skip to content

Всё для WordPress, веб-разработки — и не только

🔧 Contact Form 7: настраиваем отправку писем и исправляем ошибки доставки

🔧 Contact Form 7: настраиваем отправку писем и исправляем ошибки доставки

Как Contact Form 7 отправляет письма и почему они не доходят

Contact Form 7 используют на 5+ миллионах сайтов, это самый популярный плагин форм для WordPress. Настроить форму из трёх полей можно за пару минут, но когда письма перестают приходить, начинается головная боль: владелец сайта теряет заявки, не понимает причин и лезет в дебри форумов.

Проблема почти никогда не в самом плагине. CF7 передаёт письмо функции wp_mail(), а та, вашему серверу. Дальше сценарий зависит от хостинга, настроек PHP, активных плагинов и десятка других факторов. Один выключенный REST API или неправильное поле «От кого», и форма работает, а писем нет.

Мы собрали пошаговую настройку почтового шаблона CF7 и разобрали все типовые причины отказа, с конкретными решениями, которые проверены на десятках сайтов.

💡 Быстрый обзор:

  • Заполняем поля Кому, От кого и Тема в настройках письма
  • Копируем готовый HTML-шаблон тела письма
  • Проверяем основные причины, почему письма не уходят
  • Настраиваем SMTP для стабильной доставки

Настройка почтового шаблона: пошагово

Открываем форму в админке: Контактная форма → выбрать форму → вкладка «Письмо». Здесь CF7 собирает письмо из трёх частей: заголовков, темы и тела. Ошибка в любом поле ломает доставку, пройдёмся по каждому.

Кому, От кого и Тема

Кому, ваш рабочий email, на который приходят заявки. Например, info@ваш-домен.com или Gmail-адрес, если вы используете SMTP-плагин.

От кого, здесь главное правило: домен отправителя должен совпадать с доменом сайта. Большинство хостеров отклоняют письма, где в поле «От кого» стоит [email protected], а сайт висит на mysite.com. Ставьте site@ваш-домен.com, сам ящик может не существовать, это нормально. Почтовый сервер проверяет именно домен, а не реальность адреса.

Тема, используйте макросы CF7 для подстановки данных:

1[_site_title] — Форма «Контактная форма»

[_site_title] автоматически подставит название сайта из настроек WordPress. Так вы сразу видите, с какого проекта пришла заявка.

Дополнительные заголовки, Reply-to не трогаем, CF7 сам выставит email из поля формы, которое вы укажете в теле письма.

Тело письма: HTML-шаблон

Стандартное письмо CF7, это голый текст с метками полей. Выглядит дёшево и нечитаемо. Вот шаблон, который мы используем на всех проектах, с логотипом, нормальной вёрсткой и ссылками на email/телефон клиента:

1<img src="https://ВАШ_ДОМЕН.COM/wp-content/uploads/2024/logo-150x150.png"
2 style="max-width: 150px !important;">
3
4<h3>Пользователь заполнил следующие данные:</h3>
5
6<p><b>Имя:</b> [text-59]</p>
7<p><b>E-mail:</b> <a href="mailto:[Email]">[Email]</a></p>
8<p><b>Телефон:</b> <a href="tel:[tel-116]">[tel-116]</a></p>
9<p><b>Сообщение:</b> [textarea-102]</p>
10
11<p>Сообщение отправлено с сайта [_site_title] ([_site_url])</p>

Что здесь важно: логотип должен быть квадратным и компактным (около 150 px по каждой стороне), иначе в почтовых клиентах он поедет. Макросы в квадратных скобках ([text-59], [Email]), это теги полей вашей формы; подставьте свои названия из вкладки «Форма». И обязательно отметьте галочку «Использовать HTML-формат письма» под редактором шаблона, без неё HTML-теги придут как plain text.

Галочка HTML-формата письма в CF7

6 причин, почему письма не уходят, и что с этим делать

1. Неправильное поле «От кого»

Самая частая ошибка: в «От кого» указан email клиента из формы, [Email]. Сервер получателя видит письмо с доменом gmail.com, отправленное с вашего хостинга, и блокирует его как спуфинг. Решение: в «От кого» всегда должен быть адрес на домене сайта. Email клиента ставьте в Reply-to, через дополнительный заголовок:

1Reply-To: [Email]

2. Конфликт плагинов безопасности

Плагины вроде Wordfence, iThemes Security (теперь Solid Security) и All-In-One Security могут блокировать исходящие HTTP-запросы WordPress, включая отправку писем. Диагностика простая: отключите все плагины, кроме Contact Form 7, и протестируйте форму. Заработало, включайте плагины по одному и ловите виновника.

3. Отключён REST API

Contact Form 7 использует WordPress REST API для отправки форм через AJAX. Плагины оптимизации, тот же Clearfy Cache (примечание: с октября 2025 проект перешёл под крыло Super Page Cache и больше не развивается отдельно; текущим пользователям рекомендуют мигрировать на Super Page Cache), могут отключать REST API для ускорения сайта. Проверьте настройки вашего оптимизатора: переключатель REST API должен быть в положении «Выкл», то есть REST API включён и работает.

4. Хостинг блокирует функцию mail()

На дешёвых хостингах PHP-функция mail() часто отключена или урезана. Contact Form 7 по умолчанию отправляет письма именно через неё. Напишите в поддержку хостинга и спросите, разрешена ли mail() на вашем тарифе. Если нет, переходите на SMTP (раздел ниже), это решает проблему радикально.

5. Письма попадают в спам

Даже если письмо ушло, Gmail или почта хостинга может положить его в спам. Причины: отсутствие SPF/DKIM-записей у домена, «подозрительный» заголовок «От кого», HTML без текстовой части. Решение, SMTP-плагин с отправкой через внешний сервис (Gmail API, Mailgun, SendGrid). Они подписывают каждое письмо DKIM-подписью и используют авторитетные SMTP-серверы, доставляемость становится практически стопроцентной.

6. Чувствительность к версии PHP и WordPress

CF7 активно обновляется (сверьте актуальную версию на wordpress.org, на середину 2026 это ветка 6.x, работает на PHP 7.4 и выше). Если ваш хостинг крутит древний PHP 5.6 или, наоборот, вы включили экспериментальный PHP 8.4 без проверки совместимости, письма могут тихо падать. Держите PHP 8.1-8.2, это золотая середина.

Настройка SMTP: решаем проблему доставки раз и навсегда

SMTP, это протокол, который передаёт письмо не через функцию mail() вашего сервера, а через полноценный почтовый сервис. Для WordPress есть десяток плагинов, которые перехватывают wp_mail() и маршрутизируют письма через внешний SMTP-сервер.

Что выбрать:

  • Gmail API, бесплатно до 500 писем в сутки через Google Workspace или личный Gmail. Плюс: отличная доставляемость. Минус: нужно создавать проект в Google Cloud Console и получать OAuth-ключи.
  • Brevo (бывший Sendinblue), 300 писем в сутки бесплатно, простой SMTP с логином и паролем. Не требует OAuth.
  • Mailgun, 100 писем в сутки бесплатно, API-ключ и готово. Для разработчиков.

Установите любой SMTP-плагин (WP Mail SMTP, Post SMTP, FluentSMTP, все бесплатны в репозитории WordPress), введите данные от провайдера, и функция mail() вам больше не нужна. CF7 продолжит работать как обычно, но письма пойдут через надёжный канал.

CSS и кастомный шрифт в письмах CF7

Если вы отправляете не просто заявки, а, например, подтверждение заказа с краткими деталями товара, имеет смысл стилизовать письмо. CSS в email работает через inline-стили (style=""), внешние таблицы стилей почтовые клиенты игнорируют. Вот пример стилизованного шаблона:

1<img src="https://ВАШ_ДОМЕН.COM/logo.png"
2 style="max-width: 150px !important;">
3
4<h2 style="font-family: Arial, sans-serif; color: #333;">
5 Пользователь выбрал товар:
6</h2>
7<h2 style="font-family: Arial, sans-serif;">[hidden-120]</h2>
8
9<hr style="border: 1px solid #eee;">
10
11<h3 style="font-family: Arial, sans-serif; color: #555;">
12 Пользователь заполнил следующие данные:
13</h3>
14
15<p style="font-size: 14px;"><b>Имя:</b> [text-59]</p>
16<p style="font-size: 14px;"><b>Телефон:</b> <a href="tel:[tel-116]">[tel-116]</a></p>
17<p style="font-size: 14px;"><b>Email:</b> [Email]</p>
18
19<p style="color: #999; font-size: 12px;">
20 Сообщение отправлено с сайта <b>[_site_title] ([_site_url])</b>
21</p>

Правила те же: логотип, квадрат, галочка HTML-формата, включена, макросы, свои. Кастомные шрифты из Google Fonts в почте не работают, ставьте системные стеки (Arial, Helvetica, sans-serif).

⁉️🤔 Частые вопросы

Почему CF7 показывает «Сообщение отправлено», а письма нет?

CF7 отвечает за сбор данных и передачу их WordPress, а не за финальную доставку. Ответ «успешно» означает, что AJAX-запрос отработал без ошибок. Сама отправка письма происходит в фоне через wp_mail(), и если на этом шаге что-то пошло не так, хостинг заблокировал mail(), адрес «От кого» не прошёл проверку, письмо ушло в спам, CF7 не покажет ошибку. Поэтому после настройки всегда тестируйте форму на реальный почтовый ящик.

Обязательно ли использовать SMTP-плагин?

Не обязательно, но настоятельно рекомендуется. Без SMTP ваши письма отправляет PHP-функция mail(), она не аутентифицирует отправителя, не подписывает DKIM и часто блокируется спам-фильтрами. SMTP-плагин добавляет аутентификацию и радикально повышает доставляемость. На практике мы видели десятки сайтов, где форма «работала», но письма уходили в спам или не доходили вовсе. После включения SMTP через Post SMTP или FluentSMTP проблема исчезала за 5 минут.

Что делать, если CF7 перестал работать после обновления WordPress?

Сначала проверьте версию PHP, CF7 требует PHP 7.4 или выше (сверьтесь с официальной документацией). Затем отключите плагины кеширования и оптимизации: они часто ломают REST API при обновлении ядра. Если не помогло, временно переключитесь на стандартную тему WordPress и протестируйте форму. В большинстве случаев это конфликт с плагином кеширования или безопасности, который ещё не адаптировался под новую версию ядра.

Как проверить, что REST API работает?

Откройте в браузере https://ваш-сайт.com/wp-json/, если видите JSON с перечнем доступных эндпоинтов, REST API жив. Если получаете 404 или белый экран, REST API отключён плагином оптимизации или security-плагином. Это самый быстрый способ диагностики: endpoint отдаёт JSON, CF7 имеет всё необходимое для работы. Ищите настройки REST API в плагинах вроде Clearfy, Perfmatters, WP-Optimize или в security-решениях вроде Wordfence.

Можно ли отправлять письма с вложениями через CF7?

Да, CF7 поддерживает загрузку файлов через поле [file]. В настройках письма, в поле «Вложения», укажите макрос этого поля, и файл прикрепится к письму. Большинство хостеров ограничивают размер вложений через upload_max_filesize в PHP (обычно 2-8 МБ). Для множественной загрузки используйте отдельные поля. Если письма с вложениями не уходят при работающей форме без вложений, проблема в лимите размера, уменьшите файлы или попросите хостер увеличить лимит.

Что ставить в 2026 году: CF7 + SMTP или альтернативы?

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

Поэтому формула 2026 года такая: Contact Form 7 + SMTP-плагин. Поставьте FluentSMTP (бесплатный, легковесный, без рекламы в админке) или Post SMTP, и настройте отправку через Gmail API, Brevo или Mailgun. Эти два компонента вместе дают: неограниченную кастомизацию форм + доставляемость на уровне корпоративных сервисов. Цена, 0 $, время настройки, 10 минут.

Если же вы хотите форму «из коробки», где всё работает сразу и без танцев с бубном, присмотритесь к WPForms или Ninja Forms. Они платные, но SMTP-отправка у них вшита по умолчанию через собственные серверы. Выбор за вами: гибкость CF7 или простота коммерческих решений.

🔗 Contact Form 7 на WordPress.org | 🔗 Документация CF7