Добрый день уважаемые форумчане,пожалуйста сильно не критикуйте и не пинайте,я в этом деле новичок и хотел бы с Вашей помощью разобраться и научиться создавать скрипт PHP для отправки письма с сайта.Для примера я взял шаблон сайта Hemera http://ivang-design.com/hemera/moveimage/,там форма почты уже есть на html : Код (Text): <div id="contact-mes"> <div class="container"> <form name="ajax-form" id="ajax-form" action="mail-it.php" method="post"> <div class="eight columns"> <label for="name">Имя: * <span class="error" id="err-name">В видите имя</span> </label> <input name="name" id="name" type="text" /> </div> <div class="eight columns"> <label for="email">E-Mail: * <span class="error" id="err-email">Введите электронную почту</span> <span class="error" id="err-emailvld">Электронная почта не является действительным форматом</span> </label> <input name="email" id="email" type="text" /> </div> <div class="sixteen columns"> <label for="message">Ваш текст:</label> <textarea name="message" id="message"></textarea> <button class="send_message" id="send">Отправить</button> <div class="error" id="err-form">Существует проблема отправки, проверте формат!</div> <div class="error" id="err-timedout">Соединение с сервером истекло!</div> <div class="error" id="err-state"></div> </div> </form> <div id="ajaxsuccess">Письмо успешно отправлено !!!</div> </div> </div> JS: Код (Text): jQuery(document).ready(function ($) { // wait until the document is ready $('#send').click(function(){ // when the button is clicked the code executes $('.error').fadeOut('slow'); // reset the error messages (hides them) var error = false; // we will set this true if the form isn't valid var name = $('input#name').val(); // get the value of the input field if(name == "" || name == " ") { $('#err-name').fadeIn('slow'); // show the error message error = true; // change the error state to true } var email_compare = /^([a-z0-9_.-]+)@([da-z.-]+).([a-z.]{2,6})$/; // Syntax to compare against input var email = $('input#email').val(); // get the value of the input field if (email == "" || email == " ") { // check if the field is empty $('#err-email').fadeIn('slow'); // error - empty error = true; }else if (!email_compare.test(email)) { // if it's not empty check the format against our email_compare variable $('#err-emailvld').fadeIn('slow'); // error - not right format error = true; } if(error == true) { $('#err-form').slideDown('slow'); return false; } var data_string = $('#ajax-form').serialize(); // Collect data from form $.ajax({ type: "POST", url: $('#ajax-form').attr('action'), data: data_string, timeout: 6000, error: function(request,error) { if (error == "timeout") { $('#err-timedout').slideDown('slow'); } else { $('#err-state').slideDown('slow'); $("#err-state").html('An error occurred: ' + error + ''); } }, success: function() { $('#ajax-form').slideUp('slow'); $('#ajaxsuccess').slideDown('slow'); } }); return false; // stops user browser being directed to the php file }); // end click function }); Остаётся только создать самому файл скрипа mail-it.php (отправки письма)! В интернете я нашёл вот такой скрипт: Код (Text): <?php $mail = new Mail("no-reply@mysite.ru"); // Создаём экземпляр класса $mail->setFromName("Иван Иванов"); // Устанавливаем имя в обратном адресе if ($mail->send("abc@mail.ru", "Тестирование", "Тестирование<br /><b>письма<b>")) echo "Письмо отправлено"; else echo "Письмо не отправлено"; class Mail { private $from; private $from_name = ""; private $type = "text/html"; private $encoding = "utf-8"; private $notify = false; /* Конструктор принимающий обратный e-mail адрес */ public function __construct($from) { $this->from = $from; } /* Изменение обратного e-mail адреса */ public function setFrom($from) { $this->from = $from; } /* Изменение имени в обратном адресе */ public function setFromName($from_name) { $this->from_name = $from_name; } /* Изменение типа содержимого письма */ public function setType($type) { $this->type = $type; } /* Нужно ли запрашивать подтверждение письма */ public function setNotify($notify) { $this->notify = $notify; } /* Изменение кодировки письма */ public function setEncoding($encoding) { $this->encoding = $encoding; } /* Метод отправки письма */ public function send($to, $subject, $message) { $from = "=?utf-8?B?".base64_encode($this->from_name)."?="." <".$this->from.">"; // Кодируем обратный адрес (во избежание проблем с кодировкой) $headers = "From: ".$from."\r\nReply-To: ".$from."\r\nContent-type: ".$this->type."; charset=".$this->encoding."\r\n"; // Устанавливаем необходимые заголовки письма if ($this->notify) $headers .= "Disposition-Notification-To: ".$this->from."\r\n"; // Добавляем запрос подтверждения получения письма, если требуется $subject = "=?utf-8?B?".base64_encode($subject)."?="; // Кодируем тему (во избежание проблем с кодировкой) return mail($to, $subject, $message, $headers); // Отправляем письмо и возвращаем результат } } ?> Помогите подправить тот скрипт, с разъяснениями,так как я новичок и мне сложно самому понать и разобраться?!
А зачем вы идете путем "Я хочу разобраться, как работает лампочка, поэтому купил себе автомобиль и пытаюсь разобраться в нем"? http://php.ru/manual/function.mail.html
,маэстро пробовал вот это,тоже не чего не вышло....подскажите поподробнее... Код (Text): <?php // Сообщение $message = "Line 1\nLine 2\nLine 3"; // На случай если какая-то строка письма длиннее 200 символов мы используем wordwrap() $message = wordwrap($message, 200); // Отправляем mail('моя@почта', 'My Subject', $message); ?>
при отправки почты пишет вот что ; а это сама форма; Код (Text): <div class="sixteen columns"> <p class="subhead">ФОРМА ОТБРАТНОЙ СВЯЗИ!</p> </div> </div> <div id="contact-mes"> <div class="container"> <form name="ajax-form" id="ajax-form" action="mail-it.php" method="post"> <div class="eight columns"> <label for="name">Имя: * <span class="error" id="err-name">В видите имя</span> </label> <input name="name" id="name" type="text" /> </div> <div class="eight columns"> <label for="email">E-Mail: * <span class="error" id="err-email">Введите электронную почту</span> <span class="error" id="err-emailvld">Электронная почта не является действительным форматом</span> </label> <input name="email" id="email" type="text" /> </div> <div class="sixteen columns"> <label for="message">Ваш текст:</label> <textarea name="message" id="message"></textarea> <button class="send_message" id="send">Отправить</button> <div class="error" id="err-form">Существует проблема отправки, проверте формат!</div> <div class="error" id="err-timedout">Соединение с сервером истекло!</div> <div class="error" id="err-state"></div> </div> </form> <div id="ajaxsuccess">Письмо успешно отправлено !!!</div> </div> </div>
Интерфейс вижу, код не вижу. И исправьте ошибки в тексте, что ли, что эта за "форма оТбратной связи!"?
Код (Text): <?php // Сообщение $message = "Line 1\nLine 2\nLine 3"; // На случай если какая-то строка письма длиннее 200 символов мы используем wordwrap() $message = wordwrap($message, 200); // Отправляем mail('моя@почта', 'My Subject', $message); ?> сайт залит на Hostinger
Навскидку: 1. У вас может не вызываться сам скрипт. Вытащите его в отдельный файл, типа test_mail.php, вместо mail(....) напишите var_dump(mail(.....)) и посмотрите, что выведет, если этот test_mail.php открыть напрямую в браузере 2. Возможно, на хостинге какие-то ограничения на отправку почты 3. Возможно, на вашей@почте письмо уходит в спам (очень часто бывает)
,Добрый день у меня хостинг "HOSTINGER.RU"....сделал как вы написали не каких изменений.....может подскажите каким лучше хостингом пользоваться,желательно что бы он бесплатный был для того что бы можно было тестировать и учиться!например такой как ucoz,но с php бесплатно!
да я только учусь...поэтому мне пока сложно разобраться с чего начать и как! Добавлено спустя 1 минуту 39 секунд: .....расскажите поподробнее как на локальном сервере правильно проверить?! я поставил OpenServer
залить в каталоги к которым ваш пакет openserver предоставляет http-доступ и зайти в браузере по нужному адресу. если честно я очень против всяких комплексов вроде денвера потому что он не позволяет вам думать. я году в 2005 тоже начинал с денвера, но уже году в 2006 понял что это не дает мне понять как всё это дело взаимодействует. в результате по манам, которые тут были выложены, сам поставил всё для wamp и сам потом руками правил конфиги. очень рекомендую пройти этот путь. и обязательно ознакомиться с rfc по основным технологиям с которыми так или иначе работаете.
не понял сути вопроса. что значит переделать с php на html? хтмл это как бы статический язык разметки гипертекста. он не умеет письма отправлять. или вы хотите выполнять пхп в хтмл файлах? тогда нужно пхп-машине сказать чтоб она кушала хтмл файлы. но я бы убил за такое.
Ребята куда прописать свою почту в скрипте? Код (Text): <?php if (isset($_REQUEST['email'])) //if "email" is filled out, send email { //send email $email = $_REQUEST['email'] ; $subject = "Mail test" ; $server = $_SERVER['HTTP_HOST']; $message = "If you got this message, mail sending from $server is working fine :)" ; mail( "$email", "$subject", $message, "From: mailtest@" . $_SERVER['HTTP_HOST'] ); echo "Message has been sent to $email"; } else //if "email" is not filled out, display the form { $server = $_SERVER[HTTP_HOST]; echo "<h1>Mail test from $server</h1> <form method='post' action='" . $_SERVER['PHP_SELF'] . "'> Enter Your Email: <input name='email' type='text' /><br /><br /> <input type='submit' name='Submit' value='Submit' /> </form>"; } ?>
в документации к функции mail() все четко написано. если куда письму лететь - в аргумент $to, если просто в письме прислать, то где-то в тексте аргумента $message. правильно?
смотря что именно вы пытаетесь сделать. отправка простого письма это невероятно простое действие. тут ещё нет разных представлений, вложений и тому подобного, с чем придется учить rfc по электронной почте. в интернете хренова туча примеров просто отправки письма. даже с немного усложненными алгоритмами вроде проверок полей. что вы пытаетесь сделать? пришел юзер - форма. отправил форму - проверка формы и отправка письма. я вас не сильно оскорблю повторением чуть ранее озвученного вопроса? сколько? кажется, вы не пытаетесь разобраться даже с чем-то простым. а я люблю хруст купюр в кошельке. а еще я делом помогаю на этом форуме. и очень люблю когда человек не ленится поискать по форуму. но безусловно когда у человека мозги кипят - хруст купюр в кошельке мне нравится больше ))))
Да понял уже давно что ты хочешь денег!,если бы были ...я бы уже давно кому нибудь заплатил и не морочил бы себе и другим голову...я понимаю что ты в этом профи....но не забывай что и ты можешь когда та по какому то вопросу обратиться, и тебе точно так же скажут ,шелести бумагой......когда у тебя их не будет!......ладно всё это херня,вобщем если не кто помочь по человечески не может,то думаю можно тему закрыть и искать помощи на других форумах!
нет, ты не понял. не денег я хочу. а чтоб ты голову включил. тут херова туча реализаций. возьми любую за основу, поковыряй и напиши сообщение не в стиле "взял топор. правильно делаю?" или "сжег корову. в том направлении двигаюсь?" или "прибил яйца к брусчатке. заработает?" а примерно такое: * делаю: if(){...}else{... mail(); ...} * ожидаю: проверку формы и 1) форму если она криво заполнена и 2) письмо если она вроде правильно заполнена. при этом 2.1) учитываю результат отправки письма. * имею: почему-то вместо моей формы открывается яндекс.ру и ничего не понятно. тогда это диалог по делу. ты вкладываешь свои силы в свой код и в свое развитие, а мы тебе помогаем развиваться в нужном направлении. всякие уставшие нытики вызывают только отвращение. устал - переспи с мыслью и приходи завтра. ноешь - попроси у матушки денег, пусть купюры зашуршат в кошельке человека, который не ноет. лепишь код тяп ляп вдруг прокатит - не прокатит. если я что-то могу сделать сам я делаю сам. если не могу - оплачиваю специалиста. это рынок. иногда могу но все равно оплачиваю специалиста. это благотворительность. Я тебе пытался помочь по-человечески, хотя ты и не соизволил выполнить положенный минимум проявления уважения к окружающим. например, вообще нет никакой отладки. откуда я знаю какая именно у тебя проблема? может ты на тостере пытаешься этот код выполнить. у меня вот почта ходит, всё настроено. у клиентов у моих ходит, спасибо мне, всё настроено. а у тебя не ходит. для начала докажи себе работоспособность своего скрипта на своей локалке, а потом залей рабочий сценарий к себе на хостинг. если не заработает - получи максимально возможную отладочную информацию. вдруг ее будет достаточно для багфикса. ну или если нет то тогда будет такой мегавариант как сношать техсап хостинга. согласись, пхп-ру не имеет отношения к тому что у тебя не работает почта. и тут нет телепатов которые скажут за тебя почему она у тебя не работает. хорошей тебе пятницы.
если бы ты внимательно почитал все посты,где я писал что мало в этом понимаю и что пока не могу разобраться с чего начать,так как с этим не когда не сталкивался,а нужно было просто показать как правильно и грамотно написать скрипт,шаг за шагом и так далее.... и где и как поставить свою почту.....а ты если видишь что не получается,так подскажи...ты же спец...а не намикать о шелесте денег!....очень хорошо и понятно объясняет проблему Хыиуду!
ну так задача-то какая? чтоб почта ходила сегодня? тогда быстрее аутсорс. чтоб понимать как это работает - курим ман столько сколько нужно для понимания. пока я указал четко на необходимость дебага. это значит какие ошибки твоя пхп-машина сыпит при выполнении данного кода. не знакомы с терминами - лезем читать раздел "на танке" и вновь пробуем получить отладочные данные. вот помоги мне. твой код с небольшими модификациями: Код (Text): if (isset($_REQUEST['email'])) { $email = $_REQUEST['email']; $subject = 'Mail test'; $message = "If you got this message, mail sending from {$_SERVER['HTTP_HOST']} is working fine :)"; $additional_headers = 'From: mailtest@' . $_SERVER['HTTP_HOST']; $result = @mail($email, $subject, $message, $additional_headers); echo ($result) ? 'OK' : 'FKUUUUCUCUCUCUUC!!!'; } else { ?><h1>Mail test from <?=$_SERVER[HTTP_HOST]?></h1> <form method="post" action="<?=$_SERVER['PHP_SELF']?>"> Enter Your Email: <input name="email" type="text" /><br /><br /> <input type="submit" name="Submit" value="Submit" /> </form><?php } по отправке формы мне дает в браузере: Код (Text): OK а на почтовую заглушку приходит: Код (Text): Return-Path: <unknown> Delivered-To: unknown X-Sendmail-Dummy: /usr/sbin/sendmail -t -i To: test@example.com Subject: Mail test X-PHP-Originating-Script: 1001:ru_php_forum_50241.php From: mailtest@example.com If you got this message, mail sending from example.com is working fine :) что я делаю не так?