Иногда бывают случаи, что причиной неработающих форм связи на сайте является вовсе не проблема в коде этих форм, а проблема в самом хостинге.
Проверка
Проверить отправляет ли вообще хостинг письма довольно просто:
Подключитесь по FTP к сайту
Создайте в корне php файл, например https://site.ru/test-mail.php
Внутри файла размещаем следующий код
<?php if (mail("test@example.com", "заголовок", "текст")) { echo 'Отправлено'; } else { echo 'Не отправлено'; } ?>
Обращаемся к файлу через frontend например https://site.ru/test-mail.php . В зависимости от echo мы поймём работает функция mail() или нет.
Причины и решения
Причин данной проблемы может быть много, это и блокировка функции хостером из-за подозрений в спаме с сайта, настройки конфигурации сервера и прочее.
Для начала стоит обратиться в техподдержку хостинга для уточнения причин, если всё же данная функция вам недоступна - есть вариант решения проблемы, можно использовать https://ru.wikipedia.org/wiki/SMTP .
Если формы связи созданы через плагины CMS, то стоит смотреть документацию к ним и к CMS, например настройки https://ru.wikipedia.org/wiki/SMTP в Modx находятся в разделе core /manager/?a=system/settings .
Если на сайте используются самописные решения или надо написать свою форму с https://ru.wikipedia.org/wiki/SMTP , то существуют специальные php библиотеки например https://github.com/PHPMailer/PHPMailer
Пример использования PHPMailer
В файле-обработчике формы связи подключаем библиотеку, например
require_once 'sender.php'; $sender = new sender;
В файле sender.php находятся настройки и пути библиотеки https://github.com/PHPMailer/PHPMailer в которых прописаны логин, пароль, порт, сервер почты и т.д.
Вместо функции mail() отправка письма в обработчике будет выглядеть следующим образом
$message_data = array( 'email' => $_POST['email'], 'name' => $_POST['name'], 'title' => $sender->mail_content['title'], 'text' => $message_text, 'alt_text' => strip_tags($message_text) ); $mailSend = $sender->sendMail($sender->smtp_data, $message_data);