Если письма из WordPress попадают в спам, не доходят до Gmail или вообще не отправляются, проблема обычно не в самом сайте, а в том, как он отправляет почту. По умолчанию WordPress использует wp_mail(), а дальше уже подключается системная отправка сервера. На дешёвом хостинге это часто означает слабую репутацию IP, отсутствие нормальной аутентификации и нестабильную доставку.
Для рабочих задач лучше сразу перевести отправку на SMTP: через почтовый сервис с авторизацией, SPF/DKIM/DMARC и понятными логами. Ниже — не абстрактная теория, а схема, которая помогает быстро понять, где ломается цепочка: WordPress, SMTP, DNS или сам почтовый ящик.
Когда SMTP действительно нужен
SMTP имеет смысл не только для форм обратной связи. Он нужен, если сайт отправляет:
- уведомления администратору о новых комментариях, заказах, заявках;
- письма для сброса пароля и регистрации;
- уведомления из плагинов форм, бронирования, LMS, CRM;
- транзакционные письма, которые нельзя терять.
Если письма важны для бизнеса, полагаться на mail() или на «как-нибудь отправится» — плохая идея. Но и SMTP сам по себе не гарантирует доставку: он только делает отправку управляемой и проверяемой.
Диагностика проблемы: где именно ломается отправка
Перед настройкой полезно понять, что именно не работает. Частая ошибка — сразу ставить плагин SMTP, не проверив базовые вещи. В результате письмо всё равно не уходит, а причина остаётся скрытой.
Что проверить в первую очередь
- Отправляются ли письма вообще через
wp_mail()без SMTP. - Нет ли ошибок PHP в логах при отправке.
- Не блокирует ли хостинг исходящие соединения на порт 587 или 465.
- Совпадает ли домен отправителя с доменом в DNS-записях SPF/DKIM.
- Не уходит ли письмо в спам из-за отсутствия
Fromс домена сайта.
Если есть доступ к SSH, полезно быстро проверить, что WordPress действительно вызывает отправку. Для этого можно временно включить логирование ошибок и посмотреть, что возвращает wp_mail().
add_action('wp_mail_failed', function ($wp_error) {
error_log('wp_mail_failed: ' . $wp_error->get_error_message());
error_log(print_r($wp_error->get_error_data(), true));
});Этот хук не чинит отправку, но помогает увидеть, на каком этапе возникает сбой: неверный SMTP-хост, отказ в авторизации, таймаут или ошибка TLS.
Пошаговая настройка SMTP в WordPress
Самый практичный путь — использовать отдельный SMTP-сервис или почтовый провайдер, который рассчитан на транзакционные письма. Для сайта это обычно надёжнее, чем отправка через личный ящик на обычном хостинге.
Шаг 1. Выберите способ отправки
Есть три рабочих варианта: плагин SMTP, собственный код через phpmailer_init или внешний сервис с API. Для большинства сайтов быстрее и безопаснее начать с плагина, а код использовать только если нужна жёсткая интеграция или минимальная зависимость от админки.
| Подход | Плюсы | Минусы |
|---|---|---|
| Плагин SMTP | Быстрая настройка, логирование, тестовые письма | Дополнительный плагин, зависимость от интерфейса |
Код через phpmailer_init | Контроль, меньше лишнего | Нужно поддерживать код и хранение секретов |
| API почтового сервиса | Хорошая доставляемость, часто есть логи | Нужна интеграция и иногда отдельный плагин |
Если нужен быстрый старт, подойдёт плагин SMTP с тестовой отправкой. Если задача — надёжная отправка для формы или уведомлений, лучше выбирать сервис с логами и понятной репутацией домена.
Шаг 2. Настройте DNS для домена
Без DNS-аутентификации письма часто будут попадать в спам даже при правильном SMTP. Минимум, который стоит проверить у домена:
- SPF — разрешает отправку от имени домена;
- DKIM — подписывает письмо;
- DMARC — задаёт политику обработки подделок;
- совпадение домена в
Fromс доменом отправки.
Если сервис выдаёт готовые DNS-записи, не сокращайте их и не объединяйте без понимания. Ошибка в одной символе может привести к тому, что письмо формально отправится, но доверия у получателя не будет.
Шаг 3. Подключите SMTP в WordPress
Если вы настраиваете отправку кодом, используйте фильтр phpmailer_init. Ниже пример для обычного SMTP-сервера. Секреты лучше хранить в wp-config.php или в переменных окружения, а не в теме.
define('WPMAIL_SMTP_HOST', 'smtp.example.com');
define('WPMAIL_SMTP_PORT', 587);
define('WPMAIL_SMTP_USER', 'no-reply@example.com');
define('WPMAIL_SMTP_PASS', 'secret-password');
define('WPMAIL_SMTP_FROM', 'no-reply@example.com');
define('WPMAIL_SMTP_NAME', 'Example Site');
add_action('phpmailer_init', function ($phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = WPMAIL_SMTP_HOST;
$phpmailer->SMTPAuth = true;
$phpmailer->Port = WPMAIL_SMTP_PORT;
$phpmailer->Username = WPMAIL_SMTP_USER;
$phpmailer->Password = WPMAIL_SMTP_PASS;
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = WPMAIL_SMTP_FROM;
$phpmailer->FromName = WPMAIL_SMTP_NAME;
$phpmailer->CharSet = 'UTF-8';
});Если провайдер требует SSL на 465 порту, меняется только Port и SMTPSecure:
$phpmailer->Port = 465;
$phpmailer->SMTPSecure = 'ssl';Важно не смешивать настройки: 587 обычно работает с tls, 465 — с ssl. Если поставить не тот режим, соединение может устанавливаться, но авторизация будет падать.
Проверка результата после внедрения
После настройки не ограничивайтесь кнопкой «Отправить тест». Нужно проверить весь путь письма: от WordPress до почтового ящика получателя.
Что именно проверить
- Тестовое письмо приходит на Gmail, Outlook и корпоративный ящик.
- В заголовках письма есть признаки успешной аутентификации SPF/DKIM.
- В логах SMTP нет повторных попыток, таймаутов и отказов.
- Письма из форм и системных уведомлений тоже уходят, а не только тест из плагина.
- Ответный адрес и
Fromне подменяются хостингом.
Если есть доступ к почтовым заголовкам, посмотрите, нет ли там Authentication-Results с провалом SPF или DKIM. Это самый быстрый способ понять, почему письмо дошло, но оказалось в спаме.
Ещё один практичный тест — отправить письмо на адрес в другом домене и проверить, не меняется ли тема, кодировка и имя отправителя. Иногда проблема не в SMTP, а в том, как плагин формирует MIME-часть письма.
Частые ошибки и как их исправить
Неверный порт или шифрование
Симптом: сервер не отвечает, авторизация не проходит, в логах таймаут. Обычно это значит, что выбран не тот порт или не тот режим SMTPSecure. Сверьте настройки с документацией SMTP-провайдера, а не с подсказкой из старой статьи.
Письмо отправляется, но попадает в спам
Чаще всего причина в доменной аутентификации и репутации отправителя. Проверьте SPF, DKIM, DMARC и домен в From. Если отправляете с адреса gmail.com через свой SMTP, это почти всегда плохая идея для сайта.
Хостинг блокирует исходящие соединения
На некоторых тарифах исходящий SMTP ограничен. Тогда WordPress не сможет подключиться к внешнему серверу, даже если логин и пароль верные. В этом случае проще сменить способ отправки или использовать сервис, который работает через API и HTTPS.
Секреты лежат в репозитории
Если SMTP-пароль записан в теме или плагине и попал в Git, это уже инцидент безопасности. Перенесите настройки в wp-config.php или переменные окружения, а пароль смените.
Безопасность и производительность
SMTP — это не только про доставку, но и про контроль доступа. Не давайте плагину лишние права, не храните пароли в открытом виде в админке без необходимости и не используйте один и тот же ящик для сайта и личной переписки.
Если сайт отправляет много писем, не делайте это синхронно в момент пользовательского запроса. Для тяжёлых сценариев лучше выносить отправку в очередь или хотя бы минимизировать количество писем, которые уходят на одном хите. Иначе форма начнёт тормозить из-за ожидания ответа SMTP-сервера.
Для сайтов с большим количеством технических уведомлений полезно включить логирование отправки, но хранить его ограниченное время. Логи помогают искать сбои, но не должны разрастаться бесконтрольно.
Когда лучше взять SMTP-плагин, а когда писать код
Если задача — быстро оживить отправку писем на обычном сайте, плагин удобнее: он даёт тестовую отправку, журнал и понятный интерфейс. Если же у вас кастомная тема, несколько форм и нужен контроль над конфигурацией, код через phpmailer_init надёжнее и проще для сопровождения.
На практике рабочая схема такая: сначала настраиваете SMTP через плагин, проверяете доставку, а потом, если проект требует, переносите параметры в код и убираете лишнюю зависимость. Это особенно полезно для сайтов, где админка не должна зависеть от ручных настроек менеджера.
Если нужен редакционный стек вокруг технических задач WordPress, для контентных сайтов иногда удобно сочетать SMTP-настройку с чисткой дублей и SEO-оптимизацией через Clearfy Pro, но только если это действительно закрывает конкретную проблему сайта, а не ставится «на всякий случай».