Как избежать проблем с отправкой писем через 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)Отличная доставка, аналитика, масштабируемостьСложнее настроить, платные тарифыМассовые рассылки, маркетинг
Как автоматизировать удаление неработающих шорткодов в WordPress
11.03.2026
Как правильно сделать удалённый раздел админки WordPress для клиентов
04.03.2026
Как отключить кэш в WordPress для разработчиков
27.03.2026
Как избежать конфликтов между плагинами в WordPress
11.12.2025
Отзывы с экспертной оценкой в WordPress: настройка и примеры кода
26.12.2025