WordPress не отправляет почту — полная настройка SMTP
wp_mail(), которая по умолчанию использует PHP mail(). А mail() на большинстве хостингов не работает. Не потому что плохой хостинг — потому что отправка без аутентификации это спам-вектор, и хостеры справедливо её блокируют.
Решение: SMTP
Нужен SMTP-сервер с авторизацией. Плагин WP Mail SMTP — простейший способ. Бесплатной версии достаточно для любого сайта.
1. Установка и данные сервера
Плагины → Добавить → «WP Mail SMTP» → Установить → Активировать
WP Mail SMTP → Настройки → Другой SMTP
Рабочие конфигурации:
- Яндекс 360 — smtp.yandex.ru, 465, SSL. Не подводит.
- Mail.ru бизнес — smtp.mail.ru, 465, SSL.
- Beget — smtp.beget.com, 465, SSL. Простой, но иногда задержки.
2. SPF — обязательно
Без SPF почтовые серверы не знают, что ваш сервер имеет право отправлять почту от вашего домена. Добавьте TXT-запись:
v=spf1 include:_spf.yandex.net ~all
Для Mail.ru: include:_spf.mail.ru.
3. DKIM — очень желательно
DKIM подписывает письмо криптографической подписью. Без него письмо может пройти SPF, но всё равно упасть в спам. Настраивается в панели почтового провайдера + TXT-запись в DNS:
# Яндекс 360: Почта → DKIM-подписи → Создать
# Копируете публичный ключ → добавляете TXT-запись:
mail._domainkey.yourdomain.ru IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSq..."
4. DMARC — для полной защиты от спуфинга
DMARC говорит почтовым серверам что делать с письмами, не прошедшими SPF/DKIM. Добавьте TXT-запись:
_dmarc.yourdomain.ru IN TXT "v=DMARC1; p=quarantine; rua=mailto:admin@yourdomain.ru"
p=quarantine — сомнительные письма в спам. p=reject — вообще не принимать (включайте когда уверены что SPF/DKIM работают).
Что часто идёт не так
- From Email не совпадает с доменом SMTP. Провайдер видит несоответствие и режет письмо. В WP Mail SMTP: Force From Email =
site@вашдомен.ru. - Порт 587 (TLS) вместо 465 (SSL). 465 надёжнее — меньше проблем с блокировками на shared-хостингах.
- Письма уходят в спам, хотя SPF настроен. Нет DKIM. Добавьте.
- Плагин показывает «письмо отправлено», а его нет. SMTP-сервер принял, но получатель отклонил. Проверьте на mail-tester.com — он даст рейтинг доставляемости.
Когда способ не сработает
- Хостинг блокирует исходящие порты 465/587. На некоторых shared-тарифах Beget и Timeweb исходящий трафик на нестандартные порты режется. Решение: транзакционный сервис через HTTP API — Brevo (300 писем/день бесплатно), Mailgun, SendGrid. Не SMTP, а REST — порты не нужны.
- Яндекс 360 не даёт создать пароль приложения. Бывает на новых аккаунтах. Включите двухфакторную аутентификацию — после этого появится раздел «Пароли приложений».
- Письма доходят до Gmail, но не до Mail.ru. Mail.ru агрессивнее фильтрует. Проверьте репутацию IP сервера через postmaster.mail.ru. Если IP в чёрном списке — только смена IP (другой хостинг или прокси-сервер).
Частые вопросы
phpmailer_init занимает 15 минут и ломается при обновлении. Плагин — 2 минуты, плюс логи и тест отправки.wp_mail() с их статусом.Не получается настроить почту?
Настрою SMTP, SPF, DKIM, DMARC. Письма будут доходить. Обычно хватает часа.