Задать вопрос
@Anarchy

Почему не работает скрипт отправки письма с сайта?

Здравствуйте! Почему-то не могу отправить сообщения с формы на сайте. Сайт на wordpress, но форма без плагина. Используется простой скрипт:
<?php
//Если форма отправлена
if(isset($_POST['submit'])) {

	//Проверка Поля ИМЯ
	if(trim($_POST['contactname']) == '') {
		$hasError = true;
	} else {
		$name = trim($_POST['contactname']);
	}
	//Проверка правильности ввода EMAIL
	if(trim($_POST['email']) == '')  {
		$hasError = true;
	} else if (!preg_match("/^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]{2,}\.[a-zA-Z0-9\-\.]+$/i", trim($_POST['email']))) {
		$hasError = true;
	} else {
		$email = trim($_POST['email']);
	}
	//Проверка Поля Компания
	if(trim($_POST['company']) == '') {
		$hasError = true;
	} else {
		$company = trim($_POST['company']);
	}

	//Проверка поля ТЕМА
	if(trim($_POST['subject']) == '') {
		$hasError = true;
	} else {
		$subject = trim($_POST['subject']);
	}

	//Проверка поля Телефон
	if(trim($_POST['tel']) == '') {
		$hasError = true;
	} else {
		$tel = trim($_POST['tel']);
	}
	
	//Проверка наличия ТЕКСТА сообщения
	if(trim($_POST['message']) == '') {
		$hasError = true;
	} else {
		if(function_exists('stripslashes')) {
			$comments = stripslashes(trim($_POST['message']));
		} else {
			$comments = trim($_POST['message']);
		}
	}


	//Если ошибок нет, отправить email
	if(!isset($hasError)) {
		$emailTo = 'test@ya.ru'; //Получатель
		$myname = 'test@ya.ru'; //Ящик, выступающий отправителем
		$body = "Имя: $name \nEmail: $email \nTelephone: $tel \n\n $company \n\n $comments";
		$headers = 'From: My Site <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $tel;
		mail($emailTo, $subject, $body, 'From:'.$myname. "\r\n" . "MIME-Version: 1.0\r\nContent-type: text/plain; charset=utf-8");
		//mail($emailTo, $subject, $body, $headers);
		$emailSent = true;
	}
}
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input name="contactname" type="text"  required="required"  placeholder="Name*">
<input name="company" type="text"  required="required"  placeholder="Компания">
<input name="tel" type="tel"  required="required"  placeholder="Phone*">
<input name="email" type="email"  placeholder="Email*">
<input name="subject" type="text" class="form-control" required="required"  placeholder="Subject*">
<textarea name="message" placeholder="Сообщение"></textarea>
<?php if(isset($hasError)) { //Если найдены ошибки ?>
<p style="padding-bottom: 30px;text-align: center;">Please check if all fields are correct.</p>
<?php } ?>
<?php if(isset($emailSent) && $emailSent == true) { //Если письмо отправлено ?>
<p style="padding-bottom: 30px;text-align: center;">Thank you!</p>	
<?php } ?>
<button name="submit" type="submit" >SEND</button>
</form>

В логах пусто. Писем на почте нет. В чем ошибка? Или подскажите 100% работающий скрипт для отправки простой формы (без ajax, валидации) с выводом сообщения при отправке. Сайт на wordpress
  • Вопрос задан
  • 586 просмотров
Подписаться 1 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
serg_small_developer
@serg_small_developer
Начинающий прогер
Многие почтовики не пропускают функцию mail, нужно искать что-то другое
Ответ написан
Комментировать
XXXXPro
@XXXXPro
Fullstack Web developer
Сайт на VDS или на обычном хостинге? Если на VDS, то настроен ли на нем MTA (программа обмена почтой типа sendmail, postfix и т.п.)? И корректно ли прописан путь к утилите sendmail в настройках PHP? Удается ли отправить письмо через sendmail из командной строки?
Еще нужно проверить, что указано в SPF и DMARC домена, возможно, там стоит не принимать почту от недоверенных хостов. (Поэтому адрес отправителя лучше сделать в своем домене, а не на ya.ru).
Еще в качестве простого решения для VDS могу посоветовать утилиту msmtp, она позволяет отправлять почту через сторонний сервис без MTA-агента.
Ответ написан
Комментировать
politon
@politon
HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
Проверь возможность отправки вообще.
Бесплатные хостинги могут блокировать отправку
Создай файл sendtest.php
С содержимым:
<?php
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    if (mail("твоя@почта.ru", "Тестовая отправка", "Проверка отправки почты. Успешна")) {
          echo "Письмо отправлено!";
    } else {
           echo "Дрочи хостера";}
    ?>

Закинь в корень сайта и перейди http://твой_сайт.ru/sendtest.php
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы