Отладка проблемы с отправкой писем через PHPMailer в WordPress

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

Если ваши письма не отправляются из WordPress, это часто связано с неправильной конфигурацией PHPMailer — встроенного компонента для отправки почты. Проблемы могут проявляться как полное отсутствие писем, так и ошибки вида "SMTP connect() failed" или "Could not instantiate mail function".

Для диагностики начните с проверки следующих аспектов:

  • Активность функции wp_mail() и её обработка;
  • Настройки SMTP-сервера, если вы используете внешний SMTP;
  • Ошибки в логах сервера и WordPress;
  • Совместимость плагинов, которые могут влиять на почтовую функцию;
  • Проверка доступности функции mail() в PHP (если используется по умолчанию).

Как проверить отправку писем с базовой функцией WordPress

Создайте тестовый PHP-файл в корне сайта с таким кодом:

<?php
$sent = wp_mail('your-email@example.com', 'Тест отправки', 'Если вы получили это письмо, отправка работает.');
if ($sent) {
    echo 'Письмо отправлено успешно';
} else {
    echo 'Ошибка при отправке письма';
}

Если письмо не пришло, значит проблема в конфигурации почты или сервере.

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

Самый надежный способ — настроить отправку через SMTP-сервер, например, Gmail, Яндекс.Почта или корпоративный SMTP. Для этого можно использовать код в functions.php темы или в отдельном плагине:

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

После внесения этих настроек отправляйте тестовое письмо через wp_mail(). Убедитесь, что SMTP-данные корректны и сервер разрешает подключение.

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

1. Отправьте тестовое письмо через код из предыдущего блока.
2. Проверьте папку "Отправленные" или входящие у получателя.
3. Включите ведение логов SMTP, например, добавив в код:

$phpmailer->SMTPDebug = 2;

Это выведет подробный лог подключения и ошибок в консоль или логи сервера.

Частые ошибки и способы исправления

  • Ошибка "SMTP connect() failed": Проверьте правильность хоста, порта и наличие блокировки на сервере (например, firewall или хостинг не разрешает исходящие SMTP-соединения).
  • Неверный логин или пароль SMTP: Убедитесь в правильности данных, также проверьте, не требуется ли двухфакторная аутентификация и создание пароля приложения (например, Gmail).
  • Письма попадают в спам: Проверьте SPF, DKIM и DMARC записи домена, а также используйте валидный From-адрес из вашего домена.
  • Функция mail() отключена на сервере: В этом случае без SMTP отправка не будет работать.
  • Плагин блокирует отправку почты: Отключите все плагины, влияющие на почту, и проверьте отправку.

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

  • Не храните SMTP-пароли в открытом виде в functions.php, используйте константы в wp-config.php или переменные окружения.
  • Используйте плагины с проверенной репутацией для SMTP, если не хотите писать код самостоятельно (например, WP Mail SMTP).
  • Ограничьте частоту отправки почты, чтобы избежать блокировки SMTP-сервером.
  • Регулярно обновляйте WordPress и плагины, чтобы избежать уязвимостей в почтовой системе.

Сравнительная таблица: варианты настройки отправки почты в WordPress

МетодПлюсыМинусыРекомендации
Использование mail() PHPПростота, нет доп. настроекНизкая надежность, письма часто в спаме, может быть отключеноПодходит для тестовых сайтов
Настройка PHPMailer через SMTP (кодом)Контроль, надежность, меньше спамаНеобходимы знания SMTP, хранение паролейОптимально для разработчиков
Плагины SMTP (WP Mail SMTP и др.)Удобно, поддержка, GUIДополнительный плагин, нагрузкаРекомендуется для новичков
Как удалить неработающие варианты оплаты в WooCommerce
10.05.2026
Как создать автоматическое расширение XML Sitemap в WordPress с пользовательскими типами записей
08.02.2026
Как добавить атрибуты в CSS-классы WordPress без плагинов
03.02.2026
Как разделить конкретные части шаблона WordPress на отдельные файлы
15.03.2026
Как автоматически удалять неиспользуемые медиа-файлы в WordPress
23.05.2026