WooCommerce: как правильно настроить отправку писем без плагинов

Диагностика проблемы: почему письма WooCommerce не отправляются

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

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

Первым шагом проверьте, работают ли системные уведомления WordPress, например, восстановление пароля. Если и они не отправляются, проблема глобальная по серверу.

Как отладить и настроить отправку писем WooCommerce без плагинов

1. Проверка работы функции mail() на сервере

Создайте простой тестовый PHP-файл mail-test.php в корне сайта со следующим кодом:

<?php
$to = 'youremail@example.com';
$subject = 'Test mail';
$message = 'This is a test email from your server.';
$headers = 'From: no-reply@yourdomain.com' . "\r\n" .
    'Reply-To: no-reply@yourdomain.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

if(mail($to, $subject, $message, $headers)) {
    echo 'Mail sent successfully';
} else {
    echo 'Mail sending failed';
}
?>

Зайдите на http://yourdomain.com/mail-test.php и проверьте результат. Если "Mail sending failed", значит проблема на уровне сервера — обратитесь в техподдержку хостинга или настройте SMTP.

2. Перенаправление отправки писем WordPress на SMTP вручную

Чтобы обойти проблемы с mail(), можно реализовать SMTP-отправку в коде темы или плагина. Добавьте в functions.php вашей темы следующий код:

add_action('phpmailer_init', 'custom_phpmailer_smtp');
function custom_phpmailer_smtp(PHPMailer $phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host       = 'smtp.yourprovider.com'; // SMTP-сервер
    $phpmailer->SMTPAuth   = true;
    $phpmailer->Port       = 587; // или 465
    $phpmailer->Username   = 'your_smtp_login';
    $phpmailer->Password   = 'your_smtp_password';
    $phpmailer->SMTPSecure = 'tls'; // или 'ssl'
    $phpmailer->From       = 'no-reply@yourdomain.com';
    $phpmailer->FromName   = 'Your Site Name';
}

Обязательно замените параметры на свои данные SMTP. Этот способ не требует установки плагинов и позволяет надежно отправлять письма.

3. Проверка шаблонов писем WooCommerce

Некорректный код в переопределенных шаблонах писем может препятствовать отправке. Проверьте папку yourtheme/woocommerce/emails/. Для диагностики временно отключите кастомные шаблоны, переименовав папку.

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

После настройки SMTP и проверки шаблонов выполните следующие действия для проверки:

  • Создайте тестовый заказ в WooCommerce и проверьте, приходит ли уведомление покупателю и администратору;
  • Сбросьте пароль пользователя и проверьте получение письма;
  • Посмотрите логи почтового сервера (если есть доступ) на предмет ошибок;
  • Проверьте папку «Спам» у получателей.

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

  • Ошибка: письма попадают в спам или не доходят
    Проверьте SPF, DKIM и DMARC записи DNS. Без корректных записей почтовые сервисы могут блокировать письма.
  • Ошибка: SMTP-сервер не отвечает
    Убедитесь, что порт и адрес SMTP правильные, а на сервере не блокируется исходящий трафик.
  • Ошибка: конфликт с другими плагинами
    Отключите сторонние плагины, связанные с почтой, чтобы проверить конфликт.
  • Ошибка: некорректные права на папки с шаблонами WooCommerce
    Проверьте права доступа на папки и файлы шаблонов, они должны быть читаемы веб-сервером.

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

  • Используйте отдельный email-аккаунт для отправки системных писем, чтобы уменьшить риск компрометации.
  • Не храните SMTP-пароли в открытом виде в functions.php. Лучше использовать wp-config.php или переменные окружения.
  • Для массовой рассылки используйте специализированные сервисы (SendGrid, Mailgun) с API, чтобы избежать проблем с блокировкой.
  • Отключите SMTP-отправку, если сайт находится в стадии разработки, чтобы не засорять почтовый ящик тестовыми письмами.
Как создать динамическое меню в WordPress с помощью PHP
18.12.2025
Как добавить собственные поля в WordPress без плагинов
11.11.2025
Как автоматически удалять нерабочие скрипты в WordPress для ускорения сайта
07.03.2026
Автоматическое отображение динамических пользовательских форм в WordPress
20.03.2026
Как создать автоматическое расширение XML Sitemap в WordPress с пользовательскими типами записей
08.02.2026