Сценарий знакомый: письма из формы не доходят, WooCommerce не отправляет уведомления, а хостинг отвечает, что mail() у него «работает как есть». В WordPress почти все системные письма идут через wp_mail(), а уже она по умолчанию использует PHP mail. На нормальном хостинге это часто нестабильно: письма попадают в спам, режутся антиспамом или вообще не уходят.
Ниже — практический способ перевести отправку на SMTP, не отключая сами уведомления. Если задача именно в том, чтобы убрать системные письма совсем, это отдельная история: сначала нужно понять, какие письма отключать, а какие оставить, иначе легко сломать регистрацию, сброс пароля или подтверждения заказов.
Когда проблема именно в отправке писем
Сначала проверьте, что вы лечите не форму, а канал доставки. Часто ошибка выглядит как «письмо не приходит», но причина находится в другом месте:
- хостинг блокирует исходящую почту с сайта;
- домен не имеет SPF/DKIM/DMARC или они настроены криво;
- плагин формы отправляет письмо, но адрес получателя неверный;
- WooCommerce шлёт уведомления, но они попадают в спам;
- на сайте несколько плагинов меняют
From:и ломают заголовки.
Быстрая диагностика
Проверка должна быть простой и воспроизводимой. Не гадайте по логам почтового ящика — отправьте тест из WordPress и посмотрите, что реально происходит.
- Откройте настройки почты в плагине SMTP или в своей реализации.
- Отправьте тестовое письмо на внешний адрес, не связанный с доменом сайта.
- Проверьте заголовки письма: от кого оно отправлено, через какой сервер прошло, есть ли отметка об аутентификации.
- Если письмо не пришло, смотрите журнал отправки, а не только папку «Спам».
Если вы используете WooCommerce, отдельно проверьте уведомления о новом заказе и сбросе пароля. Это разные сценарии, и один может работать, а другой — нет.
Что лучше: плагин, код или настройка хостинга
Для большинства проектов самый безопасный путь — SMTP через проверенный плагин. Кодом имеет смысл настраивать только нестандартные случаи: свой почтовый сервер, отдельный API-провайдер или жёсткие требования к заголовкам.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Плагин SMTP | Обычный сайт, WooCommerce, формы | Быстро, есть тесты и логирование | Дополнительный плагин, зависимость от настроек |
Код через phpmailer_init | Нужна точечная интеграция | Гибкость, без лишнего интерфейса | Нужно поддерживать код и следить за обновлениями |
| Почта хостинга без SMTP | Только если хостинг надёжно настроен | Минимум действий | Часто проблемы с доставляемостью и спамом |
Если нужен быстрый и предсказуемый результат, берите SMTP-плагин. Если нужен контроль и вы понимаете, что делаете, можно настроить отправку через код.
Пошаговая настройка SMTP в WordPress
Ниже логика одинакова для большинства SMTP-плагинов: вы задаёте сервер, порт, шифрование и учётные данные. Названия полей могут отличаться, но смысл один.
1. Выберите почтовый сервис
Подойдёт любой сервис, который даёт SMTP-доступ: корпоративная почта, почта домена у хостера или внешний провайдер. Для сайта с заказами лучше использовать отдельный ящик, а не личную почту администратора.
2. Укажите параметры подключения
Типичный набор выглядит так:
SMTP host: smtp.example.com
SMTP port: 587
Encryption: TLS
Authentication: yes
Username: noreply@example.com
Password: ********Если провайдер требует SSL, используйте порт 465. Не смешивайте порт и шифрование наугад: неверная комбинация — частая причина таймаутов и ошибок авторизации.
3. Задайте корректный адрес отправителя
Адрес From должен совпадать с доменом, который разрешён для отправки. Если сайт шлёт письма от wordpress@site.ru, а SMTP-аккаунт — на другом домене, часть сервисов будет помечать письмо как подозрительное.
4. Включите журнал отправки
Без логов вы не поймёте, где именно ломается цепочка. Журнал нужен хотя бы на время настройки: он покажет, ушло ли письмо с сайта, получил ли его SMTP-сервер и не вернул ли ошибку аутентификации.
Настройка через код: когда нужен полный контроль
Если вы не хотите ставить отдельный плагин, можно переопределить параметры PHPMailer. Это не отключает wp_mail(), а меняет способ доставки.
<?php
add_action('phpmailer_init', function ($phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->SMTPSecure = 'tls';
$phpmailer->Username = 'noreply@example.com';
$phpmailer->Password = 'your-password';
$phpmailer->From = 'noreply@example.com';
$phpmailer->FromName = 'Site Name';
});Этот код лучше добавлять в мини-плагин или в functions.php дочерней темы, если вы понимаете риски. Пароль в коде — не лучший вариант для боевого сайта, но для локальной проверки или закрытого проекта это допустимо. В продакшене безопаснее хранить секреты вне репозитория и не светить их в теме.
Если вам нужно отключить только часть писем, а не весь канал, используйте фильтры WordPress точечно. Например, можно отключить уведомления о новых пользователях, но оставить письма о заказах и сбросе пароля.
<?php
add_filter('wp_new_user_notification_email', '__return_false');Но применять такие фильтры нужно аккуратно: если сайт с регистрацией, отключение уведомлений может запутать администраторов и пользователей. Сначала проверьте, какие письма реально нужны бизнесу.
Как проверить, что всё работает
После настройки не ограничивайтесь одним тестом. Проверка должна покрывать минимум три сценария:
- тестовое письмо из SMTP-плагина или вашей настройки;
- письмо из формы обратной связи;
- письмо WooCommerce о новом заказе или смене статуса заказа.
Дальше смотрите не только факт доставки, но и заголовки. В идеале письмо должно проходить аутентификацию SPF/DKIM, а домен отправителя — совпадать с доменом почты.
Если письма доходят, но попадают в спам, проблема уже не в WordPress. Тогда проверяйте DNS-записи домена, репутацию IP и содержимое письма: слишком много ссылок, подозрительные темы, отсутствие нормального From и Reply-To часто ухудшают доставляемость.
Частые ошибки и как их исправить
Неверный порт или шифрование
Классическая ситуация: указан порт 587, но включён SSL, либо порт 465, но выбран TLS. Исправление простое — сверить параметры у почтового провайдера и не подставлять значения «по памяти».
Отправка с чужого адреса
Если SMTP-аккаунт один, а From другой, письмо может быть отклонено или помечено как поддельное. Используйте адрес того же домена, который разрешён для отправки.
Конфликт нескольких плагинов почты
Если одновременно активны два SMTP-плагина, они могут перехватывать wp_mail() друг у друга. Оставьте только один способ отправки и проверьте, нет ли в теме или mu-plugin собственного кода для PHPMailer.
Хостинг режет исходящие соединения
Некоторые тарифы блокируют исходящий SMTP на уровне сети. В этом случае настройка в WordPress не поможет: нужен другой порт, другой провайдер или внешний почтовый сервис с API.
Письма уходят, но не доходят
Это уже вопрос доставляемости. Проверьте SPF, DKIM и DMARC, а также правильность домена в From. Без этого даже корректно настроенный WordPress не гарантирует попадание во входящие.
Чек-лист перед запуском в продакшен
- SMTP-аккаунт создан и активен.
- Порт и шифрование совпадают с требованиями провайдера.
- Адрес отправителя принадлежит тому же домену или разрешён политикой сервиса.
- Тестовое письмо приходит на внешний ящик.
- Проверены уведомления форм, WooCommerce и сброс пароля.
- Включён лог отправки хотя бы на период наблюдения.
- Нет двух плагинов, которые одновременно меняют почтовую отправку.
Безопасность и производительность
Не храните SMTP-пароль в открытом виде в публичном репозитории. Если проект командный, лучше вынести секреты в переменные окружения или хотя бы ограничить доступ к файлам конфигурации. Для сайта с высокой нагрузкой SMTP через внешний сервис обычно надёжнее, чем попытки слать письма напрямую с веб-сервера.
Если у вас много транзакционных писем, не отправляйте их синхронно в момент запроса пользователя без необходимости. Для тяжёлых сценариев лучше смотреть в сторону очередей или хотя бы минимизировать объём письма: меньше вложений, меньше лишней разметки, меньше внешних картинок.
Когда нужен не только SMTP, но и чистка лишних функций сайта, иногда удобно совместить настройку почты с общей оптимизацией через инструменты вроде Clearfy Pro: убрать лишние системные действия, сократить шум в админке и не держать на сайте то, что мешает отладке. Но саму отправку писем всё равно лучше проверять отдельно, а не «на глаз».