В моей практике такое случается редко, но случается. Чаще всего это четыре основные причин, о которых я и напишу в этой статье. На самом деле все очень просто, так что не будем затягивать.
Запрет отправки писем с помощью PHP
Бывает, что на хостинге установлен запрет отправки писем с помощью PHP функции mail(). Но тогда как отправляет Contact Form 7 ? Проверьте не установлен ли у вас еще один плагин
Так же можно разобраться почему стоит запрет на отправку через PHP mail(). Возможно, установлен дешевый тариф или просто так настроен аккаунт. Может вы потратите 5 минут, настроите сами все правильно и все заработает в обычном режиме, только не забудьте отключить smtp плагин.
Ошибка в коде самой формы
Думаю тут все понятно. Перепроверьте 100 раз код вашей формы. Возможно при написании функции отправки, вы где-то допустили ошибку. Довольно часто ко мне обращаются с просьбой помочь настроить форму для отправки писем, которая почему-то не работает. Из самых частых ошибок - отсутствие кавычек, ошибка в подключении обработчика и тд. Как говорится, семь раз отмерь - один отрежь.
Неправильно указана почта отправителя
Как бы это странно не звучало, но именно эта проблема и является самой популярным решением. Дело в том, что иногда хостинг не отправляет письмо если оно имеет не стандартный WordPress адрес. Если конкретно, то у WordPress всегда почта отправителя имеет такой вид - wordpress@site.com, где, естественно, site.com - адрес вашего сайта. Например, для моего сайта это wordpress@gnatkovsky.com.ua. Думаю вам понятно, как это работает.
Поэтому, когда вы в свей форме указываете другой адрес отправителя, письма попросту не отправляются. Довольно часто встречаю данную проблему и указав правильную почту, все становится нормально.
Несуществующий адрес отправителя.
Данная проблема, очень схожа с предыдущей, иногда они даже связаны между собой. Сейчас попробую объяснить. Допустим, вы указали в вашем коде формы, e-mail отправителя, которой не существует. В итоге вы пользуетесь третьим решением и указываете wordpress@site.com, но все же проблема остается. Так бывает из за того что на хостинге не существует почты wordpress@site.com. Вам просто нужно создать такую почту на хостинге. В каждом личном кабинете хостинга есть почтовые сервисы, для создания собственных ящиков. Создайте нужный вам адрес с доменом вашего сайта и укажите его в отправителях. Чтобы наверняка создавайте адрес из третьего примера - wordpress@site.com. Естественно, где site.com - адрес вашего сайта.
Так что если вы воспользовались решением из проблемы №3, то примените и №4, возможно именно в связке вы решите проблему с отправкой писем из WordPress
Бонус
Как бонус к статье предлагаю простейшую форму для проверки работает ли вообще отправка писем.
Создайте файл, например, mail.php и поместите в него следующий код:
<?php $to = "myemail@gmail.com"; //куда отправлять письмо, укажите свой e-mail $subject = "Проверка работы mailPHP"; $sit_url = $_SERVER['SERVER_NAME']; $message = 'Если вы это читаете, значит письмо отправлено успешно'; $headers = "Content-type: text/html; charset=UTF-8 \r\n"; $headers .= "From: <wordpress@".$sit_url.">\r\n"; $result = mail($to, $subject, $message, $headers); if ($result){ header('Content-type: text/html; charset=utf-8'); echo "Функция сработала, если хостинг отправил письмо, то вы его найдете у себя в почтовом клиенте."; }else{ header('Content-type: text/html; charset=utf-8'); echo "Что-то пошло не так :(";} ?>
Во второй строке укажите свою почту, куда должно прийти письмо проверки. В седьмой строке указана почта отправителя. Указана стандартная для вашего сайта wordpress@ и дальше ваш домен, что сформируется с помощью переменной $sit_url, которая благодаря $_SERVER пропишет ваш домен.
Если хотите можете указать произвольный e-mail, но уже после того как проверите с тем что прописано сейчас. Указать можно например так:
$headers .= "From: <no-reply@site.com>\r\n";
Когда создали файл с данным кодом, то залейте его в корневую папку сайта. В самую главную, где лежат все папки и файлы WordPress. Далее просто перейдите в браузер и введите адрес вашего сайта слеш и mail.php, получится что-то типа такого - site.com/mail.php
Если вы все сделаете правильно и на вашем сайте работает PHP отправка, то вам на почту придет письмо. если это случилось, значит с вашим сайтом все ок и нужно искать проблему в коде той формы, что не работает.
Вот и вся статья, надеюсь вы не столкнетесь с такой проблемой, но если все же такое случилось, думаю моя статья вам поможет.
На этом все, спасибо за внимание. 🙂