@chertnich

Почему не отправляются письма на почту?

Есть форма, она заполняется и данные должны уйти на почту (я указывал только свой gmail), но этого не происходит, что не так?
<?php
/*
    Template Name: Форма отправки сообщения
*/
?>

<?php
if(isset($_POST['submitted'])) {
        if(empty($_POST['name'])){
            $nameError = "Пожалуйста, введите имя";
            $hasError = true;
        } 
        else {
            $name = trim($_POST['name']);
        }

    if(empty($_POST['email'])){ 
        $emailError = "Пожалуйста введите email";
    }
    else if(preg_match("/^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$/", trim($_POST['email'])) ) {
        $emailError = "Email некорректен.";
        $hasError = true;
    }
    else{
        $email = trim($_POST['email']);
    }

    if(empty($_POST['org'])){
        $orgError = "Пожалуйста, введите огранизацию";
        $hasError = true;
    } 
    else {
        $org = trim($_POST['org']);
    }

    if(empty($_POST['num'])){
        $numError = "Пожалуйста, введите номер телефона";
        $hasError = true;
    } 
    else if (preg_match("/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/", trim($_POST['num']))) {
        $numlError = "Телефон некорректен.";
        $hasError = true;
    }
    else {
        $num = trim($_POST['num']);
    }

    if(empty($_POST['word'])){
        $wordError = "Пожалуйста, введите сообщение";
        $hasError = true;
    } 
    else {
        $word = trim($_POST['word']);
    }

    if(isset($_POST[$hasError])){
            header('location: contact-page.php');
        }
    else{
		$subject = 'Сообщение от пользователя';
        $massage = "Имя: $name \r\nEmail: $email \r\nОрганизация: $org \r\nТелефон: $num \r\n Сообщене: $word";
        mail('пример@gmail.com', $subject, $massage);
		header('location: contact-page.php');
		echo('Сообщение отправлено');
    }
}
?>


<form method="post">
			<div class="container">
				<div class="row col-7">
					<div class="col">
						Ваше имя: 
					</div>
					<div class="col">
						<input name="name" type="text" require>
						<?php if(isset($nameError) && $nameError != '') { ?>
								<span class="Error"><?=$nameError;?></span>           
						<?php }?> 
					</div>
				</div>

				<div class="row col-7">
					<div class="col">
					Ваш e-mail: 
					</div>
					<div class="col">
					<input name="email" type="text" require>
						<?php if(isset($emailError) && $emailError != '') { ?>
								<span class="Error"><?=$emailError;?></span>           
						<?php }?> 
					</div>
				</div>

				<div class="row col-7">
					<div class="col">
					Организация: 
					</div>
					<div class="col">
					<input name="org" type="text" require>
						<?php if(isset($orgError) && $orgError != '') { ?>
								<span class="Error"><?=$orgError;?></span>           
						<?php }?> 
					</div>
				</div>

				<div class="row col-7">
					<div class="col">
					Телефон: 
					</div>
					<div class="col">
					<input name="num" type="text" require>
						<?php if(isset($numError) && $numError != '') { ?>
								<span class="Error"><?=$numError;?></span>           
						<?php }?> 
					</div>
				</div>

				<div class="row col-7">
					<div class="col">
					Сообщение 
					</div>
					<div class="col">
					<textarea name="word" require></textarea>
						<?php if(isset($wordError) && $wordError != '') { ?>
								<span class="Error"><?=$wordError;?></span>           
						<?php }?> 
					</div>
				</div>
				<br>
				<input class="button" type="submit" value="Отправить">
				<input name="submitted" type="hidden" value="Отправить">
			</form>
		</div>
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Функция mail() использует почтовую подсистему сервера, на котором исполняется сам PHP. Как правило это - postfix, ну или как минимум - ssmtp.

Если не хотите устанавливать и настраивать почтовую подсистему - используйте PhpMailer, он передаст вашу почту на сервер получателя на прямую, по SMTP.

Есть третий вариант, делать SMTP самостоятельно, там очень не сложно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@beerchaser
наверное нужно начать с того, что "пример@gmail.com" не соответствует rfs2822. затем проверить логику работы с $hasError в блоке отправки. мне кажется, что она неверная.
Ответ написан
Ваш ответ на вопрос

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

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