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

Всех приветствую! В PHP не силен. Нужно сделать так, чтобы скрипт отправлял письмо на email.

Есть файл index.html и в нем форма отправки выглядит так:
<form action="mail.php" method="post" id="main_form">
<input name="title" type="text" placeholder="ИМЯ" id="main_name">
<input name="phone" type="text" placeholder="ТЕЛЕФОН" id="main_telephone">
<input name="mess" type="text" placeholder="E-MAIL" id="main_email">
<input type="submit" value="ОТПРАВИТЬ" class="ex_hover">
</form>


И есть отдельный файл mail.php
<?php 
// если была нажата кнопка "Отправить" 
if($_POST['submit']) {
$title = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000); 
$mess = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000); 
$phone = substr(htmlspecialchars(trim($_POST['phone'])), 0, 1000000); 
// $to - кому отправляем 
$to = 'demo@demo.com'; 
// $from - от кого 
$from='test@test.ru'; 
// функция, которая отправляет наше письмо
mail($to, $title, $mess, 'From:'.$from); 
echo 'Спасибо! Ваше письмо отправлено.'; 
} 

?>


Мне надо чтобы после того, как человек оставил заявку мне оно ушло на почту
  • Вопрос задан
  • 31418 просмотров
Пригласить эксперта
Ответы на вопрос 7
А ты случайно не локально тестируешь? ну opneServer или Денвер ? если да то ищи письма в папки !send или tmp !
Ответ написан
Комментировать
if($_POST['submit']) {
не вижу в форме инпута с именем submit
Ответ написан
Комментировать
Чтобы функция mail(); работала, у вас как минимум должен быть установлен SMTP служба на сервере, а также настроена обратная зона. Если для вас это сложно, то попробуйте такой вариант:

1. Качайте: swiftmailer.org/download
2. Напишите такой скрипт, который будет отправлять почту через ваш GMAIL аккаунт

<?php
// если была нажата кнопка "Отправить" 
if($_POST['submit']) {
$title = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000); 
$mess = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000); 
$phone = substr(htmlspecialchars(trim($_POST['phone'])), 0, 1000000); 
// $to - кому отправляем 
$to = 'demo@demo.com'; 
// $from - от кого 
$from='test@test.ru'; 
// функция, которая отправляет наше письмо

// подключаем swift_required.php который вы скачала и п.1
require_once '/path/to/swift-mailer/lib/swift_required.php';

// создаем письмо
$message = Swift_Message::newInstance()
  ->setSubject($title)
  ->setFrom(array($from))
  ->setTo(array($to))
  ->setBody($mess);

// настраиваем подключение к gmail
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
  ->setUsername('username@gmail.com')
  ->setPassword('password');

// отправляем
$mailer = Swift_Mailer::newInstance($transport);
$mailer->send($message);
Ответ написан
nazarpc
@nazarpc
Open Source enthusiast
Ещё проще письмо можно отправить через PHPMailer.
Да, лучше использовать авторизацию, чтобы письмо с большей вероятностью не попадало в спам.
Ответ написан
Попробуй такой вариант кода для mail.php
<?php
//Принимаем значения формы, обрабатываем и заносим в переменные. Эту часть кода в самое начало файла, до DOCTYPE
if (!empty($_POST['title'])) $name = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000);
if (!empty($_POST['phone'])) $phone = substr(htmlspecialchars(trim($_POST['phone'])), 0, 20);
if (!empty($_POST['mess'])) $text = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
?>

<?php
//Формируем письмо. Эту часть кода вставить в любое место между body
if(isset($name,$phone,$text)) {
	$subject = "Форма обратной связи"; //тема сообщения
	$message = "Имя: ".$name."<br>Телефон: ".$phone."<br>Текст: ".$text."<br>"; //содержание сообщение
	$emailto = "emailto@mail.ru"; //e-mail кому
	$emailfrom = "emailfrom@mail.ru"; //e-mail от кого
	$chek = mail($emailto, $subject, $message, "Content-type:text/html; Charset=utf-8\r\nFrom:".$emailfrom."\r\n"); //отправляем сообщение
	if($chek) echo "Ваше письмо успешно отправлено!";
	else echo "Ваше письмо не отправлено!";
}
else {
	echo "Вы заполнили не все поля!";
}
?>


p.s. проблема неработоспособности твоего кода была в том что ты не передавал значение submit и проверка if($_POST['submit']) не проходила. Мой вариант отправки письма лучше, но и его можно дорабатывать под особые случаи, но в 90% случая будет работать как надо. Сам я использую именно такой.
Ответ написан
InDiGo2010
@InDiGo2010
а может быть лучше вот такой вариант?
$headers = "From: test@test.ru <test@test.ru>\r\n"; 
$headers .= "Content-type: text/html; charset=utf-8";


$title = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000); 
$mess = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000); 
$phone = substr(htmlspecialchars(trim($_POST['phone'])), 0, 1000000);

if(empty($title))
die("Отсутствует заголовок");

if(empty($mess))
die("Отсутствует сообщение");

if(empty($phone))
die("Отсутствует телефон");


$msg = $mess."<br />".$phone;

$to = 'demo@demo.com';

if(mail($to, $title, $msg, $headers)) {
die("Успешно");
} else {
die("Сообщение не отправлено");
}


притом что этот вариант поддерживает html теги в письмах.
Ответ написан
Комментировать
@KLFWoot
Проблема в коде отправки
Плагин отправляет от имени пользователя заполняющего форму.
Проблема решается , описано тут
Отправляет как стандартными средствами, так и с плагином smtp
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы