Признаюсь сразу - раньше всегда пользовался только готовыми решениями, как, собственно, и сейчас. Только в шаблоне, который я перекраиваю, совершенно не работала кнопка отправки. Шаманил-шаманил. Испортил весь код своими экспериментами, но так ничего и не заработало. Вот как выглядит форма обратной связи: HTML: <form action="mail.php" method="post" name="form" target="blank" > <div class="col-md-6"> <div class="form-group"> <label for="InputName">Представьтесь</label> <div class="input-group"> <input action="mail.php" type="text" class="form-control" name="InputName" id="InputName" placeholder="Ваше имя" required> <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span> </div> </div> <div class="form-group"> <label for="InputEmail">Укажите почтовый ящик</label> <div class="input-group"> <input action="mail.php" type="email" class="form-control" id="InputEmail" name="InputEmail" placeholder="Email" required > <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span> </div> </div> <div class="form-group"> <label for="InputMessage">Проблема или пожелание</label> <div class="input-group"> <textarea action="mail.php" name="InputMessage" id="InputMessage" class="form-control" rows="5" required></textarea> <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span> </div> </div> <input type="submit" name="submit" id="submit" value="Отправить" class="btn wow tada btn-embossed btn-primary pull-right" action="mail.php" > </div> </form> В корне сайта создал mail.php: HTML: <?php $name = $_POST['InputName']; $email = $_POST['InputEmail']; $InputMessage = $_POST['InputMessage']; $REMOTE_ADDR = $_POST['REMOTE_ADDR']; if (isset ($InputName)) { $InputName = substr($InputName,0,20); //Не может быть более 20 символов if (empty($InputName)) { echo "<center><b>Имя при рождении не дали что ли? Назовись порядковым номером!<p>"; echo "<a href=mail.php>Вернуться и заполнить по-человечески.</a>"; exit; } } else { $InputName = "не указано"; } if (isset ($InputName)) { $email = substr($InputName,0,20); //Не может быть более 20 символов if (empty($InputName)) { echo "<center><b>Почту свою укажи, тугодум!<p>"; echo "<a href=mail.php>Вернуться и заполнить по-человечески.</a>"; exit; } } else { $InputEmail = "не указано"; } if (isset ($InputMessage)) { $InputMessage = substr($InputMessage,0,1000); //Не может быть более 1000 символов if (empty($InputMessage)) { echo "<center><b>Сообщение не написано !!!<p>"; echo "<a href=mail.php>Вернуться и правильно заполнить форму.</a>"; exit; } } else { $InputMessage = "не указано"; } $i = "не указано"; if ($InputName == $i AND $InputEmail == $i AND $InputMessage == $i) { echo "Внимание! Произошла ошибка! Вы не заполнили поля сообщения!"; exit; } $to = "marketing@madmark"; $subject = "MADMARK - заявка на халяву"; $InputMessageage = "Имя пославшего письмо: $InputName .\nЭлектронный адрес: $InputEmail\nСообщение: $InputMessage .\nIP-адрес: $_SERVER[REMOTE_ADDR]"; mail ($to,$subject,$InputMessageage,"Content-type:text/plain; charset = utf-8") or print "Чот не получается!"; echo "<center><b>Ждите ответа.<br><br> Халяву любят все. <br><br> В ближайшее время Вы обязательно получите ответ."; exit; ?>
Просидел всю ночь, читал, искал, правил. Письма так и не приходят, но стала срабатывать переадресация на страницу уведомления об успешной отправке. Но на указанное мыло письма так и не идут. Жду помощи и подсказок. Вот что у меня получилось в коде индекса и мэйла: INDEX.HTML HTML: <form action="mail.php" method="post" > <div class="col-md-6"> <div class="form-group"> <label for="name">Представьтесь</label> <div class="input-group"> <input type="text" class="form-control" name="name" placeholder="Ваше имя" required> <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span> </div> </div> <div class="form-group"> <label for="email">Укажите почтовый ящик</label> <div class="input-group"> <input type="email" class="form-control" name="email" placeholder="Email" required > <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span> </div> </div> <div class="form-group"> <label for="message">Проблема или пожелание</label> <div class="input-group"> <textarea name="message" class="form-control" rows="5" required></textarea> <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span> </div> </div> </p> <input name="bezspama" type="text" style="display:none" value="" /> <input type="submit" name="submit" value="Отправить" class="btn wow tada btn-embossed btn-primary pull-right"> </div> </form> MAIL.PHP HTML: <?php /* Задаем переменные */ $name = htmlspecialchars($_POST["name"]); $email = htmlspecialchars($_POST["email"]); $message = htmlspecialchars($_POST["message"]); $bezspama = htmlspecialchars($_POST["bezspama"]); /* Ваш адрес и тема сообщения */ $address = "info@madmark.ru"; $sub = "Заявка MADMARK"; /* Формат письма */ $mes = "Заявка MADMARK.\n Имя отправителя: $name Электронный адрес отправителя: $email Текст сообщения: $message"; if (empty($bezspama)) /* Оценка поля bezspama - должно быть пустым*/ { /* Отправляем сообщение, используя mail() функцию */ $from = "From: $name <$email> \r\n Reply-To: $email \r\n"; if (mail($address, $sub, $mes, $from)) { header('Refresh: 5; URL=http://madmark.ru'); echo ' <script type="text/javascript"> window.location = "mailback.html" </script>';} else { header('Refresh: 5; URL=http://biznessystem.ru'); echo 'Письмо не отправлено, через 5 секунд вы вернетесь на страницу Madmark.ru';} } exit; /* Выход без сообщения, если поле bezspama заполнено спам ботами */ ?>
А MAIL.PHP вообще рабочий? Я бы для начала взял заведомо рабочий скрипт в готовом виде и протестил его на своем хостинге, а потом бы стал прикручивать к лидовой странице. Что в логах пишется?
mail() функция разрешена хостером? Это что: header('Refresh: 5; URL=http://biznessystem.ru'); PHP: else { header('Refresh: 5; URL=http://biznessystem.ru'); echo 'Письмо не отправлено, через 5 секунд вы вернетесь на страницу Madmark.ru';}}exit; /* Выход без сообщения, если поле bezspama заполнено спам ботами */?>
сейчас какой-нибудь прикручу - проверю. Логи не смотрел - я в них очень долго разбираюсь - для меня там мало что понятно. Сейчас полезу смотреть. А где именно смотреть нужную информацию - не подскажешь?
это кусок кода я его не стал менять, надо бы просто доковырять чтоб работать начал, а ссылку можно и потом воткнуть. Сейчас заменю. А как узнать разрешена ли функция хостером?
HTML: else { header('Refresh: 5; URL=http://madmark.ru'); echo 'Письмо не отправлено, через 5 секунд вы вернетесь на страницу Madmark.ru';} }
Бог ты мой!!! Все, что я проверял в форме, сейчас привалило на почту... Все работает, оказывается. Только почему-то кодировка кривая.... Щас ее надо будет исправлять. Это я просто сообщаю, что функция работает. Но логи сейчас все-равно выложу, надо ведь знать на будущее) А с кодировкой попробую поколдовать сам. Не выйдет - спрошу. Я за логами, потом в кодировке шарить. А ты пока зацени страницу после отправки сообщения из формы) Просто долго выбирал. Креативлю)
Если я правильно понимаю, то это они:\ HTML: mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8 mail() on [/var/www/vhosts/xxxxxxxxx.plsk.regruhosting.ru/httpdocs/madmark.ru/mail.php:64]: To: marketing@madmark -- Headers: Content-type:text/plain; charset = utf-8
Создать файл с функцией phpinfo и выполнить его из браузера. Затем не забыть удалить. Подробнее здесь.
Ошибка. Прописано http://madmark.ru а сайт у тебя перебрасывает на http://www.madmark.ru Ты уж определись с названием сайта или он у тебя с www или без. Это разные адреса сайтов. Вот, к примеру, я делаю сайт своими руками - http://sait-svoimi-rukami.ru без www. Если ввести адрес с www - http://www.sait-svoimi-rukami.ru то сработает переадресация на сайт без www. Значит правильный вариант написания адреса форума по созданию сайта с нуля - http://sait-svoimi-rukami.ru. У тебя же всё наоборот.
Для напоминания - вот что было: Код: <?php /* Задаем переменные */ $name = $_POST["name"]; $email = $_POST["email"]; $message = $_POST["message"]; $bezspama = $_POST["bezspama"]; /* Ваш адрес и тема сообщения */ $address = "info@madmark.ru"; $sub = "Заявка MADMARK"; /* Формат письма */ $mes = "Заявка MADMARK.\n Имя отправителя: $name Электронный адрес отправителя: $email Текст сообщения: $message"; if (empty($bezspama)) /* Оценка поля bezspama - должно быть пустым*/ { /* Отправляем сообщение, используя mail() функцию */ $from = "From: $name <$email> \r\n Reply-To: $email \r\n"; if (mail($address, $sub, $mes, $from)) { echo ' <script type="text/javascript"> window.location = "mailback.html" </script>';} else { header('Refresh: 5; URL=http://madmark.ru'); echo 'Письмо не отправлено, через 5 секунд вы вернетесь на страницу Madmark.ru';} } exit; /* Выход без сообщения, если поле bezspama заполнено спам ботами */ ?> Вот что приходит на почту: Попытался изменить кодировку двумя способами: 1.: PHP: "Content-Type: text/plain; windows-1251" добавил в это: PHP: if (mail($address, $sub, $mes, $from)) Получилось это: PHP: if (mail($address, $sub, $mes, $from, "Content-Type: text/plain; windows-1251")) Не помогло, тогда пошел таким путем: Было: Код: /* Формат письма */ $mes = "Заявка MADMARK.\n Имя отправителя: $name Электронный адрес отправителя: $email Текст сообщения: $message"; Стало: Код: /* Формат письма */ $mes = "Заявка MADMARK.\n Имя отправителя: $name Электронный адрес отправителя: $email Текст сообщения: $message"; $mes = iconv("utf-8", "windows-1251", $mes); НИкакого результата. Как еще попытаться?
Попробовал добавить $headers и присвоил следующее: PHP: $headers = 'MIME-Version: 1.0' . "\r\n";$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; Добавил $headers сюда: Код: if (mail($address, $sub, $mes, $from, $headers Ииииии... снова ничего не вышло. Что же я делаю не так?
1. Везде ставить только "utf-8" 2. Проверить кодировку файлов .php, конвертнуть в notepad++ в UTF8 с BOM. 3. Проверить кодировку файла индексной страницы, конвертнуть в notepad++ в UTF8 с BOM.
Заметил следующее. Поставил перенаправление с почты хостинга на мэйловскую. На мэйл приходит корректно, а на почте хостинга - криво. Это поможет решить задачу?
И все же нет. Письмо на мэйл пришло с корректной темой, указано: Заявка MADMARK. Имя отправителя: Электронный адрес отправителя: Текст сообщения: Это то же, что и в php: PHP: /* Формат письма */$mes = "Заявка MADMARK.\nИмя отправителя: $nameЭлектронный адрес отправителя: $emailТекст сообщения:$message"; НО! Значение переменных не прописано в письме! :
Ерунда какая-то... Теперь на хостинг-почту пришли кракозябры, а на мэйловскую полное письмо: При этом я ничего не менял, просто еще раз попробовал отправить через форму.
И это еще не все.... теперь какого-то черта мне на почтЫ приходит письмо после отправки формы дважды: один раз со значениями переменных, второе следом только с $mes.
Да как увидел это поле, сразу поменял. просто никогда не настраивал почту на хостинге - впервые. если бы случайно не наткнулся, то и мучился бы до сих пор.
ну уж нет) надо разобраться в чем тут дело. Ковыряюсь. Это наверняка после того, как я строк с разных ресурсов накопировал себе в файл - вот чего-то и намудрил. Глянь свежим взглядом: PHP: <?php/* Задаем переменные */$name = $_POST["name"];$email = $_POST["email"];$message = $_POST["message"];$bezspama = $_POST["bezspama"];/* Ваш адрес и тема сообщения */$address = "info@madmark.ru";$sub = "Заявка MADMARK";/* Формат письма */$mes = "Заявка MADMARK.\nИмя отправителя: $nameЭлектронный адрес отправителя: $emailТекст сообщения:$message";if (empty($bezspama)) /* Оценка поля bezspama - должно быть пустым*/{/* Отправляем сообщение, используя mail() функцию */if (mail($address, $sub, $mes, "Content-Type: text/plain; utf-8")) { echo ' <script type="text/javascript">window.location = "mailback.html"</script>';}else { header('Refresh: 5; URL=http://madmark.ru'); echo 'Письмо не отправлено, через 5 секунд вы вернетесь на страницу Madmark.ru';}}exit; /* Выход без сообщения, если поле bezspama заполнено спам ботами */?>
И смех и грех.... Выяснил я почему у меня криво приходит почта. Щас ты должен посмеяться будешь, Джонни. Вместе с техподдержкой... Нет, начну сначала. После того, как я пролистал 148375 форумов, 3532справочника и достал пятерых человек, я решил написать в техподдержку хостинга. Вот мое сообщение: Мне перезвонили. Начали обсуждать. Долго-долго говорили, я параллельно отправил ему файлы оригиналы, чтобы он попробовал не на моих раскуроченных, а на нормальных. Потом 5 минут "оставайтесь на линии", потом еще 12435 вопросов, потом еще 5 минут на линии, потом присоединяется и говорит:" Я не пойму в чем проблема, но ... (секундная пауза)... ДА Ё%DF9796 **** ТВОЮ *** ** **** ...нУ КАК *** ТАКОЕ *** МОЖЕТ ************* (ДОЛГИЙ МАТ)., ПОТОМ СПОКОЙНО ТАК: "Денис, скажите, а как у вас отправляется 2 письма вместо одного, если на вашем тарифе php вообще не функционирует? Как, ***, вам вообще приходят письма???? Я вам перезвоню минут через 10. До сих пор жду звонка=)))
В итоге форма обратной связи работает, PHPне отключили, единственный запрет стоит на изменение версии PHP (и то он мне был нужен для обновления файла php.ini. Как продварительный итог темы - форма обратной связи работает. Отправляет письма)))
что-то со мной не так. Может инопланетяне со мной проводили эксперименты? Короче, сменил скрипт, отредактировал... и снова приходит по полтора письма. После отправки формы на почту получаю 2 письма: Пример первого: От кого: Клиент MADMARK ОБРАЩЕНИЕ С САЙТА MADMARK Имя gvlhbjkn Почта для ответа: hhhhhhhhhh@mail.ru Сообщение: xcvbnngfhjn Пример второго: От кого: Клиент MADMARK ОБРАЩЕНИЕ С САЙТА MADMARK Имя Почта для ответа: Сообщение: Код формы: HTML: <form action="mail.php" method="post" class="form-control"> <div class="col-md-6"> <div class="form-group"> <label for="name">Представьтесь</label> <div class="input-group"> <input type="text" class="form-control" name="name" placeholder="Ваше имя" required> <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span> </div> </div> <div class="form-group"> <label for="email">Укажите почтовый ящик</label> <div class="input-group"> <input type="email" class="form-control" name="email" placeholder="Email" required > <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span> </div> </div> <div class="form-group"> <label for="message">Проблема или пожелание</label> <div class="input-group"> <textarea name="message" class="form-control" rows="5" required></textarea> <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span> </div> </div> </p> <input type="submit" name="submit" value="Отправить" class="btn wow tada btn-embossed btn-primary pull-right"> </div> </form> Вот код PHP: PHP: <?PHP /* Здесь проверяется существование переменных */ if (isset($_POST['name'])) {$name = $_POST['name'];} if (isset($_POST['email'])) {$email = $_POST['email'];} if (isset($_POST['message'])) {$message = $_POST['message'];} /* Сюда впишите свою эл. почту */ $address = "zakaz@madmark.ru"; /* А здесь прописывается текст сообщения, \n - перенос строки */ $mes = "ОБРАЩЕНИЕ С САЙТА MADMARK\nИмя $name\nПочта для ответа: $email\nСообщение: $message"; /* А эта функция как раз занимается отправкой письма на указанный вами email */ $sub='ЗАЯВКА'; //сабж $email='Клиент MADMARK'; // от кого $send = mail ($address,$sub,$mes,"Content-type:text/plain; charset = utf-8\r\nОт кого: $email"); ini_set('short_open_tag', 'On'); header('Refresh: 6; URL=index.html'); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="refresh" content="6; url=index.html"> <title>С вами свяжутся</title> <meta name="generator"> <body> <center> <img src="img/shok.jpg" height="700"> </center> </body> <script type="text/javascript"> setTimeout('location.replace("/index.html")', 6000); /*Изменить текущий адрес страницы через 3 секунды (3000 миллисекунд)*/ </script> </head> </body> </html> Предполагаю, что проблема в html или у меня действительно ооочень кривые руки. Потому что php обработчик я уже новый собрал из нескольких других - от старого ничего не осталось, а письма приходят дважды. Что посоветуете?
Добавил в начало скрипта if(isset($_POST['submit'])) { Вроде бы получилось))) но зная, что почта порой задерживается, буду ждать еще и пустого письма. Если не трудно, то проверьте и вы форму.