Диагностика проблем с отправкой почты через 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) | Отличная доставка, аналитика, масштабируемость | Сложнее настроить, платные тарифы | Массовые рассылки, маркетинг |