Решение проблемы: не работает отправка писем через PHPMailer в WordPress

Диагностика проблемы с отправкой писем через PHPMailer в WordPress

Когда WordPress не отправляет письма (например, уведомления регистрации, сброс пароля, оповещения WooCommerce), чаще всего виноват PHPMailer — встроенный класс для SMTP и mail-функций PHP. Проблемы могут возникать по разным причинам: неправильные настройки SMTP, блокировка хостингом, ошибки в коде, отсутствие корректной инициализации PHPMailer, несовместимость с плагинами.

Для диагностики включите логирование ошибок почты. Добавьте в wp-config.php следующие строки:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Затем попробуйте отправить письмо (например, через форму контакта или сброс пароля). Логи ошибок появятся в wp-content/debug.log. Проверьте наличие ошибок, связанных с PHPMailer или SMTP.

Проверка базовой работы mail()

Чтобы исключить проблемы с серверной функцией mail(), создайте файл test-mail.php на сервере с таким кодом:

<?php
$to = 'ваш-email@example.com';
$subject = 'Тест mail()';
$message = 'Это тестовое письмо.';
$headers = 'From: webmaster@example.com' . "\r\n";
if(mail($to, $subject, $message, $headers)) {
    echo 'Письмо отправлено';
} else {
    echo 'Ошибка при отправке';
}

Если письмо не приходит, проблема на уровне сервера — обратитесь к хостеру.

Пошаговое решение: настройка PHPMailer через SMTP в WordPress

Лучший способ гарантировать отправку писем — использовать внешний SMTP-сервер (Gmail, Яндекс, почта хостинга). Для этого подключите к WordPress кастомный обработчик письма, переопределяющий настройки PHPMailer.

Шаг 1. Создайте плагин или добавьте код в functions.php темы

Пример кода для настройки SMTP через фильтр phpmailer_init:

add_action('phpmailer_init', 'custom_phpmailer_smtp');
function custom_phpmailer_smtp(PHPMailer\PHPMailer\PHPMailer $phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host       = 'smtp.yourmail.com'; // SMTP сервер
    $phpmailer->SMTPAuth   = true;                 // Включаем аутентификацию
    $phpmailer->Port       = 587;                  // Порт SMTP
    $phpmailer->Username   = 'your-email@yourmail.com'; // Логин SMTP
    $phpmailer->Password   = 'yourpassword';       // Пароль SMTP
    $phpmailer->SMTPSecure = 'tls';                 // Шифрование
    $phpmailer->From       = 'your-email@yourmail.com'; // От кого
    $phpmailer->FromName   = 'Ваш сайт';            // Имя отправителя
    $phpmailer->CharSet    = 'UTF-8';               // Кодировка
}

Замените параметры на свои данные SMTP-провайдера.

Шаг 2. Проверьте отправку письма через стандартные функции WordPress

Используйте функцию wp_mail() для теста:

wp_mail('your-email@example.com', 'Тест SMTP', 'Проверка работы SMTP от WordPress');

Если письмо пришло — настроено корректно.

Проверка результата после внедрения решения

1. Отправьте тестовое письмо через форму контакта или сброс пароля.
2. Проверьте почтовый ящик на получение.
3. Посмотрите в wp-content/debug.log на наличие ошибок.

Если письма не приходят, проверьте настройки SMTP и порты, блокировки на хостинге (firewall, antivirus).

Частые ошибки и как их исправить

  • Ошибка авторизации SMTP (535): проверьте логин и пароль SMTP, убедитесь, что аккаунт не заблокирован.
  • Сообщение «Connection timed out» или «Could not connect to SMTP host»: проверьте порт и доступность SMTP сервера, иногда нужно использовать SSL 465 или TLS 587.
  • Письма попадают в спам: настройте SPF, DKIM, DMARC записи DNS для вашего домена.
  • Конфликт плагинов почты: отключите другие SMTP и почтовые плагины, чтобы избежать дублирования настроек.
  • Неверный From address: многие SMTP-сервера требуют, чтобы адрес отправителя совпадал с аккаунтом SMTP.

Практические советы по безопасности и производительности

  • Не храните пароли SMTP в открытом виде в коде. Используйте константы в wp-config.php или переменные окружения.
  • Ограничьте доступ к файлам конфигурации и используйте SSL для подключения к SMTP.
  • Для массовой рассылки используйте специализированные сервисы (SendGrid, Mailgun) с API, а не SMTP.
  • Периодически проверяйте логи ошибок почты для своевременного обнаружения проблем.

Сравнение вариантов настройки отправки писем в WordPress

МетодПлюсыМинусыПример кода/плагина
Стандартная функция mail()Простота, не требует настроекНизкая надежность, письма часто в спамНет кода
Настройка PHPMailer через SMTP (код)Контроль, надежностьТребует знаний SMTP, конфигурацииКод выше в статье
Плагины SMTP (WP Mail SMTP, Easy WP SMTP)Удобство настройки, интерфейсЗависимость от плагина, возможные конфликтыWP Mail SMTP
Оптимизация изображений в WordPress с помощью автоматических плагинов
08.11.2025
Автоматическое отображение последних комментариев с подгрузкой в WordPress
14.02.2026
Как создать автоматическое сохранение данных в WordPress
03.12.2025
Как создать собственный виджет WordPress: пошаговое руководство
26.11.2025
Как добавить собственные поля в WordPress без плагинов
11.11.2025