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-плагіном. Це найшвидший спосіб діагностики: кінцева точка віддає 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