Как отладить проблемы с отправкой писем в WordPress

Отправка писем в WordPress — одна из ключевых функций для работы с регистрациями, восстановлением паролей, уведомлениями и формами обратной связи. Однако часто пользователи сталкиваются с проблемой, что письма не доходят или попадают в спам. В этой статье разберём, как отладить и решить проблемы с отправкой писем в WordPress на примерах кода и полезных плагинов.

Почему письма не доходят: основные причины

Первым делом нужно понять, почему письма не отправляются или не доходят. Частые причины:

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

Чтобы эффективно отладить проблему, нужно проверить каждый из этих пунктов.

Отладка отправки писем с помощью логирования

Самый простой способ — включить логирование всех попыток отправки почты и ошибок. Для этого можно использовать плагин WP Mail Logging. Он сохраняет в базе данные о всех исходящих письмах, что позволяет понять, отправляется ли письмо вообще.

Если вы хотите сделать логирование самостоятельно, можно добавить фильтр для перехвата функций wp_mail() и записывать ошибки:

add_action('phpmailer_init', 'wpone_phpmailer_config');
function wpone_phpmailer_config($phpmailer) {
    $phpmailer->SMTPDebug = 2; // Включаем детальный вывод отладки
    $phpmailer->Debugoutput = function($str, $level) {
        error_log("PHP Mailer debug level $level; message: $str");
    };
}

Это позволит отследить, что именно происходит на уровне SMTP.

Использование SMTP для надежной отправки писем

По умолчанию WordPress использует функцию wp_mail(), которая опирается на mail() PHP. Но часто этот метод блокируется хостингом или письма попадают в спам. Лучшее решение — настроить SMTP-сервер для отправки писем.

Для этого рекомендуются плагины:

  • WP Mail SMTP — самый популярный плагин для настройки SMTP. Поддерживает разные сервисы: Gmail, SendGrid, Mailgun, SMTP любого провайдера.
  • Post SMTP — альтернатива с расширенными возможностями отладки и логирования.

Пример настройки SMTP в коде без плагина:

add_action('phpmailer_init', 'wpone_set_smtp');
function wpone_set_smtp($phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host = 'smtp.example.com';
    $phpmailer->SMTPAuth = true;
    $phpmailer->Port = 587;
    $phpmailer->Username = 'your_username';
    $phpmailer->Password = 'your_password';
    $phpmailer->SMTPSecure = 'tls';
    $phpmailer->From = 'no-reply@example.com';
    $phpmailer->FromName = 'Ваш сайт';
}

После такой настройки письма будут отправляться через SMTP-сервер, что значительно повышает доставляемость.

Настройка SPF, DKIM и DMARC для повышения доверия к письмам

Даже если письма успешно отправляются, без правильных DNS-записей они могут попадать в спам. Необходимо настроить записи SPF, DKIM и DMARC у вашего регистратора домена или в панели управления DNS.

SPF — указывает, какие серверы имеют право отправлять почту от имени вашего домена.

DKIM — добавляет цифровую подпись к письмам, подтверждающую их подлинность.

DMARC — политика обработки писем, не прошедших SPF и DKIM.

Для настройки можно воспользоваться инструкциями вашего почтового провайдера или сервисов SMTP. Например, для SendGrid и Mailgun они предоставляют готовые DNS-записи.

Диагностика и исправление конфликтов с плагинами

Иногда проблема с почтой вызвана конфликтом плагинов, которые переопределяют функцию wp_mail(). Чтобы проверить это, временно отключите все плагины, кроме SMTP и попробуйте отправить тестовое письмо.

Также полезен плагин Health Check & Troubleshooting, который позволяет запускать сайт с отключенными плагинами только для текущего пользователя, не влияя на посетителей.

Если при отключении плагинов почта начала работать, включайте их по одному, чтобы выявить виновника.

Практический пример: отправка письма с пользовательскими заголовками

Иногда почтовые серверы требуют указывать дополнительные заголовки, например, для корректного отображения имени отправителя или Reply-To. Вот пример функции отправки письма с такими заголовками:

function wpone_send_custom_mail($to, $subject, $message) {
    $headers = array();
    $headers[] = 'Content-Type: text/html; charset=UTF-8';
    $headers[] = 'From: Ваш сайт <no-reply@example.com>';
    $headers[] = 'Reply-To: support@example.com';

    wp_mail($to, $subject, $message, $headers);
}

Используйте эту функцию для отправки писем с более точными настройками. Это поможет избежать проблем с кодировкой и неправильным отображением отправителя.

Резюме: лучшие практики для надежной отправки почты в WordPress

Подведем краткие итоги:

  • Включайте логирование отправки писем, чтобы видеть ошибки.
  • Используйте SMTP-серверы с плагинами WP Mail SMTP или Post SMTP.
  • Настройте SPF, DKIM и DMARC для домена.
  • Проверяйте конфликты с другими плагинами.
  • Добавляйте пользовательские заголовки при необходимости.

Если вы хотите упростить себе работу с настройками и оптимизацией WordPress, обратите внимание на Clearfy Pro — плагин для оптимизации и управления многими аспектами сайта, включая почту.

Как использовать WPONE AJAX в WordPress для динамического обновления контента
06.12.2025
Как использовать WPCommunity для создания приватного клубного сайта на WordPress
19.01.2026
Как использовать Transients в WordPress для кэширования данных
27.11.2025
Как добавить автоматическое сохранение записей в WordPress
13.12.2025
Как удалить бесполезные CSS и JS в WordPress для ускорения сайта
22.02.2026