Настройка Contact Form 7: письма, капча, защита от спама
Обновлено 19 октября 2026 г. · 10 мин чтения
Contact Form 7 ставят на WordPress-сайты чаще других плагинов форм: он бесплатный, лёгкий и гибкий. Но настройки по умолчанию рассчитаны на «просто работает» — письма часто уходят с адреса, который почтовые сервисы не любят, капчи нет, а заявки нигде не сохраняются. Разберём настройку Contact Form 7 по вкладкам: от шаблона формы до защиты от спама и причин, по которым Contact Form 7 не отправляет письма.
Установка и шаблон формы
Установите плагин из каталога: «Плагины» → «Добавить» → поиск «Contact Form 7» → «Установить» и «Активировать». В меню появится раздел «Контактные формы» с готовой формой «Контактная форма 1». Вставить форму на страницу можно блоком Contact Form 7 в редакторе или шорткодом, который показан в списке форм.
Шаблон формы — это HTML с тегами полей. Тег задаёт тип поля и его имя, звёздочка после типа делает поле обязательным. По именам полей данные потом подставляются в письмо.
<label> Ваше имя [text* your-name autocomplete:name] </label> <label> Email [email* your-email autocomplete:email] </label> <label> Телефон [tel your-phone placeholder "+7"] </label> <label> Сообщение [textarea your-message 40x5] </label> [acceptance consent-pd] Я согласен на обработку персональных данных [/acceptance] [submit "Отправить заявку"]
- [text* your-name] — обязательное текстовое поле с именем your-name.
- [email* your-email] — поле email с проверкой формата.
- [tel your-phone] — телефон; без звёздочки поле необязательное.
- [textarea your-message] — многострочное поле сообщения.
- [acceptance] — флажок согласия. Пока он не отмечен, кнопка отправки неактивна. Текст согласия со ссылкой на политику обработки персональных данных размещается между открывающим и закрывающим тегом.
- [submit] — кнопка отправки с вашей подписью.
Стандартные имена your-name, your-email, your-phone и your-message лучше не менять без причины: на них рассчитаны многие интеграции, а при переименовании придётся править и письмо.
Вкладка «Письмо» и автоответ «Письмо (2)»
На вкладке «Письмо» настраивается сообщение, которое получает владелец сайта. Именно здесь кроется большинство проблем с доставкой.
- Кому — адрес, куда приходят заявки. Можно указать несколько через запятую.
- От — адрес на домене сайта, например «Сайт <noreply@example.ru>». Не подставляйте сюда [your-email]: письмо «от имени» чужого домена не пройдёт проверку DMARC и уйдёт в спам или будет отклонено.
- Тема — можно использовать теги, например «Заявка с сайта: [your-name]».
- Дополнительные заголовки — Reply-To: [your-email]. Тогда кнопка «Ответить» в почте сразу подставит адрес клиента.
- Тело письма — текст с тегами полей и служебными тегами: [_url] — адрес страницы с формой, [_date] и [_time] — дата и время, [_remote_ip] — IP посетителя.
Имя: [your-name] Email: [your-email] Телефон: [your-phone] Сообщение: [your-message] -- Страница: [_url] Отправлено: [_date] [_time]
Если адрес «От» не совпадает с доменом сайта, Contact Form 7 показывает предупреждение валидатора конфигурации прямо в редакторе формы. Не игнорируйте его — это готовая подсказка, почему письма могут не доходить.
«Письмо (2)» включается отдельным флажком и обычно служит автоответом клиенту: в поле «Кому» ставится [your-email]. Делайте автоответ коротким и не повторяйте в нём текст сообщения: спам-боты используют формы с автоответом, чтобы рассылать свой текст на чужие адреса от имени вашего домена.
Сообщения и дополнительные настройки
На вкладке «Сообщения» задаются тексты, которые видит посетитель: об успешной отправке, ошибке, незаполненном обязательном поле, неверном формате email. Замените общий текст «Спасибо за ваше сообщение» на конкретный: когда с вами свяжутся и как.
Вкладка «Дополнительные настройки» принимает строки вида ключ: значение.
- demo_mode: on — форма показывает успех, но письмо не отправляет. Удобно для проверки вёрстки на тестовом сайте.
- skip_mail: on — не отправлять письмо вовсе. Используют, когда заявки забирает другая система.
- subscribers_only: true — форма доступна только авторизованным пользователям.
- acceptance_as_validation: on — неотмеченный флажок согласия не блокирует кнопку, а показывает ошибку при отправке.
Для целей в Яндекс Метрике и переадресации на страницу «Спасибо» используйте DOM-события Contact Form 7. Событие wpcf7mailsent срабатывает после успешной отправки письма, wpcf7submit — после любой отправки.
document.addEventListener('wpcf7mailsent', (event) => {
ym(XXXXXXXX, 'reachGoal', 'form_sent', { form: event.detail.contactFormId })
})Contact Form 7 сам не хранит отправленные заявки — только отправляет письма. Если письмо не дошло, заявки нет нигде. Сохранять отправки в базе WordPress умеет плагин Flamingo от того же автора или сервис сбора заявок.
Почему Contact Form 7 не отправляет письма
Если форма показывает ошибку «Не удалось отправить сообщение», проблема на сайте. Если показывает успех, но письмо не приходит, — в отправке или доставке почты.
- Функция mail() хостинга. По умолчанию WordPress отправляет письма через PHP mail() без авторизации и часто без подписи DKIM. Установите SMTP-плагин и отправляйте почту через ящик своего домена с логином и паролем.
- Адрес отправителя не на домене сайта — см. вкладку «Письмо» и предупреждения валидатора.
- Нет записей SPF, DKIM и DMARC или они не учитывают сервер, с которого уходят письма.
- Кэширование страниц. Кэширующий плагин или CDN отдают устаревшую версию страницы со старыми служебными данными формы — отправка падает с ошибкой. Исключите страницы с формами из кэша или проверьте совместимость плагина кэширования с CF7.
- Заблокирован REST API. Contact Form 7 отправляет форму через REST API WordPress; плагины безопасности, которые его отключают, ломают отправку.
- Конфликт JavaScript. После обновления темы или плагина ошибка скрипта мешает отправке — смотрите консоль браузера.
Подробный чек-лист с проверкой заголовков письма и DNS-записей — в статье «Письма с формы сайта не приходят или падают в спам: как найти причину».
Капча и защита от спама в Contact Form 7
Спам через формы — неизбежная часть жизни любого сайта. У Contact Form 7 есть несколько встроенных инструментов, и их стоит комбинировать.
- reCAPTCHA v3. Встроена в CF7: «Контактные формы» → «Интеграция» → reCAPTCHA → «Настроить интеграцию», вставьте ключ сайта и секретный ключ. Нужны ключи именно для v3 — ключи v2 не подойдут. Капча работает в фоне по оценке поведения, тег в шаблон добавлять не нужно. Порог оценки можно изменить фильтром wpcf7_recaptcha_threshold.
- Cloudflare Turnstile. В свежих версиях Contact Form 7 эта интеграция тоже встроена и находится там же, в разделе «Интеграция». Виджет добавляется во все формы автоматически, а тегом [turnstile] можно указать его место в шаблоне. Если версия плагина старая, Turnstile подключают через сторонние плагины.
- Яндекс SmartCaptcha. Встроенной интеграции нет, подключается через сторонние плагины.
- Honeypot — скрытое поле, которое заполняют только боты. Добавляется сторонним плагином, посетителям не мешает и хорошо отсекает простых ботов.
- Akismet. Если плагин Akismet активен, укажите у полей опции akismet:author и akismet:author_email — например, [text* your-name akismet:author] — и CF7 будет проверять отправки через Akismet.
- Список запрещённых слов. CF7 учитывает список запрещённых слов из раздела «Настройки» → «Обсуждение»: отправки с этими словами или IP помечаются как спам.
Учтите, что reCAPTCHA загружает скрипт Google на всех страницах сайта и показывает значок в углу экрана. Если капча заблокирована у части посетителей, их заявки не уйдут, — после включения любой капчи отправьте тестовую заявку из разных браузеров и сетей.
Хуки и надёжное сохранение заявок
Для нестандартной логики у Contact Form 7 есть хуки. Самый полезный — wpcf7_before_send_mail: он срабатывает перед отправкой письма и даёт доступ к данным формы. Например, так можно менять получателя в зависимости от выбранной темы обращения.
add_action('wpcf7_before_send_mail', function ($form, &$abort, $submission) {
$topic = (array) $submission->get_posted_data('your-topic');
if (in_array('Опт', $topic, true)) {
$mail = $form->prop('mail');
$mail['recipient'] = 'opt@example.ru';
$form->set_properties(['mail' => $mail]);
}
}, 10, 3);Через тот же хук заявки отправляют в Telegram, CRM или таблицы. Готовый пример кода и сравнение способов разобраны в статье «Contact Form 7 и Telegram: 4 способа получать заявки».
Если не хочется поддерживать свой код, установите плагин Site-Inbox. Он подписывается на отправки Contact Form 7, сохраняет каждую заявку в общей панели и присылает уведомление в Telegram. Стандартные поля your-name, your-email, your-phone и your-message распознаются автоматически, остальные сохраняются в дополнительных данных. Если API временно недоступен, событие сохраняется в WordPress и отправляется повторно через WP-Cron. Письма Contact Form 7 при этом продолжают уходить как раньше — заявка просто получает надёжную копию.
Частые вопросы
Где Contact Form 7 хранит заявки?
Нигде: плагин только отправляет письма. Для хранения отправок используйте плагин Flamingo или подключите сервис сбора заявок, который сохраняет каждую отправку в базе.
Какую капчу выбрать для Contact Form 7?
Проще всего встроенные интеграции: reCAPTCHA v3 или Cloudflare Turnstile в свежих версиях плагина. Яндекс SmartCaptcha подключается через сторонние плагины. Дополнительно включите honeypot — он не мешает посетителям.
Почему Contact Form 7 пишет «Не удалось отправить сообщение»?
Обычно это ошибка отправки почты на сервере, устаревший кэш страницы или заблокированный REST API. Проверьте SMTP-настройки, исключите страницу с формой из кэша и посмотрите консоль браузера.
Можно ли ставить email посетителя в поле «От»?
Нет. Письмо от имени чужого домена не пройдёт проверку DMARC. Указывайте адрес своего домена в «От», а [your-email] — в заголовке Reply-To.
Установите плагин Site-Inbox — каждая отправка Contact Form 7 сохранится в панели и придёт в Telegram, даже если письмо не дошло.