Форма зворотного зв'язку надсилає лист, WordPress показує «Повідомлення надіслано», а лист у поштовій скриньці так і не з'являється. Причина майже завжди одна: стандартна функція PHP mail() не годиться для доставки пошти на бойовому сайті. Розбираємо, як підключити SMTP і чому це вирішує проблему.
Чому листи WordPress не доходять до адресата
За замовчуванням WordPress надсилає листи через функцію PHP mail(), яка передає повідомлення локальному поштовому агенту сервера без авторизації і без цифрового підпису. Поштові сервіси на кшталт Gmail і Outlook бачать лист без записів SPF, DKIM і DMARC для домену відправника і мовчки відправляють його у спам або відхиляють зовсім. Окремо страждають магазини на WooCommerce: листи з підтвердженням замовлення не доходять до покупця так само, як звичайні сповіщення — налаштування магазину описано в статті WooCommerce: налаштування інтернет-магазину на WordPress.
Друга поширена причина — хостинг блокує вихідний порт 25, щоб сервер не використовували для розсилки спаму. У цьому випадку mail() поверне «лист надіслано», хоча насправді повідомлення нікуди не пішло.
Як перевірити, що саме ламає відправку
Встановіть плагін WP Mail SMTP або Check Email — зробити це можна й однією командою через термінал, без заходу в адмінку, як описано в статті WP-CLI: керування WordPress з командного рядка — і надішліть тестовий лист через розділ перевірки в налаштуваннях плагіна. Плагін покаже код відповіді поштового сервера — за ним видно, чи відхилив сервер з'єднання, порт або авторизацію.
Перевірити порт 25 із сервера можна командою:
# Перевірити, чи відповідає порт 25 на вихідних з'єднаннях
telnet smtp.gmail.com 25
Коли з'єднання зависає і не відповідає — порт заблоковано на рівні мережі, і варто використовувати порт 587 або 465 із шифруванням.
Налаштування SMTP через плагін WP Mail SMTP
Найнадійніший спосіб — надсилати пошту через зовнішній SMTP-сервер: власну поштову скриньку на домені, Gmail, SendGrid або Mailgun. Налаштування через плагін WP Mail SMTP:
- Встановіть і активуйте плагін WP Mail SMTP.
- Виберіть поштового провайдера — наприклад, Other SMTP для власної пошти на домені.
- Вкажіть SMTP-хост, порт 587, шифрування TLS, логін і пароль поштової скриньки.
- Надішліть тестовий лист через вбудовану перевірку плагіна.
Таблиця типових параметрів підключення для різних портів:
| Порт | Шифрування | Коли застосовувати |
|---|---|---|
| 587 | TLS (STARTTLS) | рекомендований варіант для більшості поштових серверів |
| 465 | SSL | коли провайдер вимагає шифрування одразу під час підключення |
| 25 | без шифрування | не застосовувати для авторизованої відправки |
Налаштування через wp-config.php без плагіна
Коли плагіни на сайті небажані, SMTP можна підключити через хук phpmailer_init у файлі теми або в окремому mu-плагіні:
add_action( 'phpmailer_init', function( $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com';
$phpmailer->Port = 587;
$phpmailer->SMTPAuth = true;
$phpmailer->Username = 'noreply@example.com';
$phpmailer->Password = 'секрет-у-змінних-середовища';
$phpmailer->SMTPSecure = 'tls';
} );
Пароль у коді — погана практика; зберігайте його у змінних середовища сервера, а не у файлі теми.
DKIM, SPF і репутація домену відправника
Навіть правильний SMTP не врятує, якщо у домену немає записів SPF і DKIM у DNS. SPF-запис повідомляє поштовим серверам, яким IP-адресам дозволено надсилати листи від імені домену, а DKIM додає цифровий підпис до кожного листа. Без цих записів листи з власної поштової скриньки на домені теж потраплятимуть у спам у частини отримувачів.
Додайте в зону DNS домену запис SPF виду v=spf1 include:example.com ~all і увімкніть DKIM у панелі керування поштою — зазвичай це робиться в ISPmanager 6 або cPanel однією галочкою в розділі поштових доменів. Пароль від поштової скриньки — такий самий секрет, як пароль від адмінки; загальний перелік заходів захисту сайту зібрано в статті Безпека WordPress: повний чеклист 2026.
Чек-лист налаштування пошти WordPress
Перед завершенням завдання перевірте:
- Плагін WP Mail SMTP або хук
phpmailer_initпідключено і налаштовано. - Застосовується порт 587 з TLS або 465 з SSL, а не порт 25.
- Тестовий лист отримано, а не лише показано «надіслано» у WordPress.
- У DNS домену додано записи SPF і DKIM.
- Пароль поштової скриньки не зберігається відкритим текстом у коді теми.