Краткий ответ
Если контактная форма не отправляет письма, чаще всего виновата неисправная отправка через PHP-функцию mail() или отсутствие SMTP-аутентификации. Сначала проверьте папку спама и логи, затем настройте SMTP-плагин с аутентификацией, после чего проверьте DNS-записи (SPF, DKIM, DMARC).
Как проявляется проблема
- Письма с контактной формы не приходят на вашу почту
- Пользователи сообщают, что не получили ответ
- Письма попадают в папку спама
- Форма показывает сообщение об успехе, но письмо не приходит
- Ошибка «Could not instantiate mail function» или похожая
Частые причины
Функция PHP mail() не работает
Многие хостинг-провайдеры блокируют или ограничивают функцию PHP mail(), поэтому сообщения не отправляются. Это самая частая причина.
Отсутствие SMTP-аутентификации
Без SMTP-аутентификации почтовые серверы часто отклоняют сообщения или помечают их как спам. Настройка SMTP решает проблему.
Неверный адрес электронной почты получателя
В настройках формы может быть указан неверный адрес или адрес, которого не существует. Проверьте поле «Кому» в настройках плагина.
Спам-фильтры на стороне получателя
Сообщения могут фильтроваться как спам из-за отсутствия записей SPF, DKIM или DMARC. Проверьте папку спама и настройки фильтров.
Конфликт с другими плагинами
Некоторые плагины безопасности или кеширования могут блокировать отправку писем. Временно отключите их и протестируйте.
Пошаговое решение
- 1
Проверьте папку спама и логи
Сначала войдите в почтовый ящик получателя и проверьте папки «Спам» и «Нежелательная почта». Если у вас есть доступ к логам сервера, поищите ошибки, связанные с
mail()или SMTP. В WordPress можно установить плагин для логирования писем (например, WP Mail Logging), чтобы увидеть, были ли сообщения вообще отправлены. - 2
Протестируйте отправку через PHP mail()
Установите плагин «Check & Log Email» или «WP Mail SMTP» и при необходимости настройте его на использование PHP mail() как способа отправки. Отправьте тестовое письмо. Если сообщение не приходит, вероятно, функция PHP mail() заблокирована или работает неправильно. Большинство хостинг-провайдеров предлагают SMTP-аккаунт с аутентификацией, который следует использовать.
- 3
Настройте SMTP-плагин
Установите и активируйте плагин WP Mail SMTP или аналогичный. В настройках выберите «Other SMTP» и введите данные, предоставленные хостингом: хост (например,
mail.vashdomen.ru), порт (587 для TLS или 465 для SSL), имя пользователя и пароль. Сохраните и отправьте тестовое письмо. - 4
Проверьте настройки контактной формы
В настройках плагина контактной формы (например, Contact Form 7, WPForms) проверьте правильность адреса электронной почты получателя. В Contact Form 7 это поле «Кому» на вкладке «Почта». Убедитесь, что нет опечаток и что домен получателя принимает почту.
- 5
Проверьте записи SPF, DKIM и DMARC
Эти DNS-записи улучшают доставляемость. Запись SPF должна включать сервер, через который вы отправляете письма (например,
v=spf1 include:_spf.google.com ~all). DKIM и DMARC часто настраиваются через панель хостинга или SMTP-сервис. Проверьте их с помощью инструмента, например MXToolbox. - 6
Отключите плагины безопасности и кеширования
Временно деактивируйте плагины безопасности (например, Wordfence) и кеширования. Затем отправьте тестовое сообщение. Если заработает, снова активируйте плагины по одному, чтобы найти виновника.
- 7
Проверьте, не блокирует ли хостинг отправку
Некоторые хостинг-провайдеры блокируют порт 25 или требуют использовать их SMTP. Обратитесь в поддержку хостинга и спросите, какие SMTP-параметры использовать. Часто достаточно использовать их сервер.
- 8
Установите плагин для альтернативной отправки
Если ничего не помогает, установите плагин, например «Post SMTP» или «FluentSMTP», которые предлагают более продвинутые опции и логирование. Настройте согласно инструкции и протестируйте.
Если ничего не помогает
Если вы испробовали все шаги, а письма по-прежнему не приходят, обратитесь к хостинг-провайдеру с деталями: точное время отправки, адрес отправителя и получателя, и возможные ошибки из логов. Проверьте, нет ли у домена получателя строгих спам-фильтров (например, Microsoft 365 или Google Workspace), и попросите получателя добавить ваш адрес в белый список. Также рассмотрите использование специализированного сервиса для транзакционных писем (например, SendGrid, Mailgun), который имеет лучшую репутацию и доставляемость. Всегда тестируйте отправку на несколько адресов (Gmail, Outlook, Yahoo), чтобы понять, проблема глобальная или специфична для одного получателя.
Как избежать повторения
- Регулярно обновляйте WordPress, плагины и тему
- Используйте SMTP-аутентификацию вместо PHP mail()
- Настройте записи SPF, DKIM и DMARC
- Периодически тестируйте контактную форму
Когда лучше обратиться к специалисту
Если вы не можете получить доступ к панели хостинга, не знаете, как настроить DNS-записи, или подозреваете более серьезную проблему с сервером, обратитесь в IT-поддержку.
Создание сайтов · Быстрые, SEO-оптимизированные многоязычные сайтыЧастые вопросы
Почему письма с контактной формы попадают в спам?
Чаще всего из-за отсутствия записей SPF, DKIM или DMARC, или потому что сервер отправляет без аутентификации. Настройте SMTP и DNS-записи, чтобы улучшить репутацию домена.
Как узнать, проблема в WordPress или на сервере?
Отправьте тестовое письмо через плагин SMTP. Если оно не приходит, проблема на сервере или в сети. Если приходит, проблема в настройках формы или плагина.
Безопасно ли использовать функцию PHP mail()?
PHP mail() не имеет аутентификации и легко может быть использована злоумышленниками. Рекомендуется SMTP с аутентификацией, который безопаснее и надежнее.