Как избежать проблем с отправкой писем через PHP mail() в WordPress

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

Частая ситуация — WordPress не отправляет письма, или они попадают в спам, или задерживаются. Для начала убедитесь, что проблема именно с функцией mail(), а не с настройками хостинга или WordPress.

  • Проверьте логи сервера (обычно error_log или почтовый лог).
  • Используйте плагин Check Email для тестовой отправки письма — если тест не проходит, проблема в конфигурации.
  • Убедитесь, что сервер не блокирует исходящую почту (часто SMTP или PHP mail() отключены на хостингах).

Почему PHP mail() в WordPress часто не работает

  • Отсутствие корректных заголовков письма (например, From, Reply-To).
  • Использование почтового сервера без авторизации.
  • Письма попадают в спам из-за отсутствия SPF, DKIM, DMARC.
  • Ограничения хостинга на отправку почты через PHP.

Пошаговое решение проблемы

1. Добавьте корректные заголовки в wp_mail()

По умолчанию WordPress использует wp_mail(), но без правильных заголовков письма часто игнорируются почтовыми системами. Добавьте фильтр, который добавит обязательный заголовок From:

add_filter('wp_mail_from', function() {
    return 'no-reply@yourdomain.com';
});

add_filter('wp_mail_from_name', function() {
    return 'Ваш сайт';
});

2. Используйте SMTP вместо PHP mail()

Самое надежное решение — отправлять почту через SMTP-сервер с авторизацией. Для этого можно использовать плагин WP Mail SMTP или реализовать вручную:

add_action('phpmailer_init', function($phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host = 'smtp.yourprovider.com';
    $phpmailer->SMTPAuth = true;
    $phpmailer->Port = 587; // или 465 для SSL
    $phpmailer->Username = 'smtp_login';
    $phpmailer->Password = 'smtp_password';
    $phpmailer->SMTPSecure = 'tls'; // или 'ssl'
    $phpmailer->From = 'no-reply@yourdomain.com';
    $phpmailer->FromName = 'Ваш сайт';
});

Так вы обойдёте ограничения на PHP mail() и повысите доставляемость.

3. Проверьте настройки SPF, DKIM и DMARC

Для домена, с которого отправляется почта, в DNS должны быть настроены записи SPF и DKIM. Без них письма чаще попадают в спам или отклоняются сервером получателя.

  • SPF: укажите IP или SMTP-сервер, который разрешено использовать для отправки.
  • DKIM: подпись сообщений для проверки подлинности.
  • DMARC: политика обработки писем, не прошедших проверки SPF/DKIM.

Настройка этих записей — задача администратора DNS вашего домена. Проверить можно через MXToolbox SPF Check и DKIM Check.

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

  • Отправьте тестовое письмо с помощью плагина Check Email или wp_mail() в коде.
  • Проверьте почту получателя и заголовки письма (в веб-интерфейсе или через просмотр исходного кода письма). Важно, чтобы в заголовках были правильные From, Return-Path, и чтобы не было ошибок SPF/DKIM.
  • Убедитесь, что письмо не попало в спам.
  • Проверьте логи почтового сервера хостинга на предмет ошибок.

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

  • Ошибка: Письма не отправляются вообще.
    Причина: SMTP не настроен или сервер блокирует mail().
    Решение: Используйте SMTP с авторизацией или обратитесь к хостеру.
  • Ошибка: Письма приходят в спам.
    Причина: Нет SPF/DKIM или неправильные заголовки.
    Решение: Настройте DNS-записи и добавьте корректный From в wp_mail().
  • Ошибка: Письма отправляются с неправильного адреса.
    Причина: Не настроены фильтры wp_mail_from и wp_mail_from_name.
    Решение: Добавьте фильтры с нужными значениями.
  • Ошибка: SMTP-сервер отклоняет соединение.
    Причина: Неверный порт, протокол или логин/пароль.
    Решение: Проверьте настройки SMTP у провайдера и в коде.

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

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

Таблица сравнения вариантов отправки почты в WordPress

МетодПлюсыМинусыКогда использовать
PHP mail()Простота, нет зависимостейПлохая доставляемость, блокировки хостингаМаленькие сайты без проблем с хостингом
SMTP с авторизациейНадежная доставка, контроль отправкиНеобходимы настройки, возможны ошибки в конфигеСредние и крупные проекты, требующие стабильности
Сервисы рассылок (API)Отличная доставка, аналитика, масштабируемостьСложнее настроить, платные тарифыМассовые рассылки, маркетинг
Как удалить или скрыть свойства товара WooCommerce в админке WordPress
29.04.2026
Как использовать WPGeneratePress для оптимальной настройки темы WordPress
16.12.2025
Как создать производительный кеш для WordPress без плагинов
25.02.2026
Как удалить старые варианты товаров WooCommerce без плагинов
19.06.2026
Как правильно удалить незаконченые заказы WooCommerce через PHP
16.06.2026