За последние 24 часа нас посетили 24428 программистов и 1726 роботов. Сейчас ищут 1914 программистов ...

Скрипт отправки письма php

Тема в разделе "Сделайте за меня", создана пользователем Dirol, 1 окт 2014.

  1. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    Добрый день уважаемые форумчане,пожалуйста сильно не критикуйте и не пинайте,я в этом деле новичок и хотел бы с Вашей помощью разобраться и научиться создавать скрипт PHP для отправки письма с сайта.Для примера я взял шаблон сайта Hemera http://ivang-design.com/hemera/moveimage/,там форма почты уже есть на html :
    Код (Text):
    1.          <div id="contact-mes">
    2.                 <div class="container">
    3.                       <form name="ajax-form" id="ajax-form" action="mail-it.php" method="post">
    4.                    <div class="eight columns">
    5.                          <label for="name">Имя: *
    6.                             <span class="error" id="err-name">В видите имя</span>
    7.                          </label>
    8.                          <input name="name" id="name" type="text" />
    9.                    </div>
    10.                    <div class="eight columns">
    11.                          <label for="email">E-Mail: *
    12.                             <span class="error" id="err-email">Введите электронную почту</span>
    13.                             <span class="error" id="err-emailvld">Электронная почта не является действительным форматом</span>
    14.                          </label>
    15.                          <input name="email" id="email" type="text" />
    16.                    </div>
    17.                    <div class="sixteen columns">
    18.                          <label for="message">Ваш текст:</label>
    19.                          <textarea name="message" id="message"></textarea>
    20.                          <button class="send_message" id="send">Отправить</button>
    21.                          <div class="error" id="err-form">Существует проблема отправки, проверте формат!</div>
    22.                          <div class="error" id="err-timedout">Соединение с сервером истекло!</div>
    23.                          <div class="error" id="err-state"></div>
    24.                    </div>
    25.                       </form>
    26.                       <div id="ajaxsuccess">Письмо успешно отправлено !!!</div>      
    27.                 </div>
    28.              </div>
    JS:
    Код (Text):
    1. jQuery(document).ready(function ($) { // wait until the document is ready
    2.    $('#send').click(function(){ // when the button is clicked the code executes
    3.       $('.error').fadeOut('slow'); // reset the error messages (hides them)
    4.  
    5.       var error = false; // we will set this true if the form isn't valid
    6.  
    7.       var name = $('input#name').val(); // get the value of the input field
    8.       if(name == "" || name == " ") {
    9.          $('#err-name').fadeIn('slow'); // show the error message
    10.          error = true; // change the error state to true
    11.       }
    12.  
    13.       var email_compare = /^([a-z0-9_.-]+)@([da-z.-]+).([a-z.]{2,6})$/; // Syntax to compare against input
    14.       var email = $('input#email').val(); // get the value of the input field
    15.       if (email == "" || email == " ") { // check if the field is empty
    16.          $('#err-email').fadeIn('slow'); // error - empty
    17.          error = true;
    18.       }else if (!email_compare.test(email)) { // if it's not empty check the format against our email_compare variable
    19.          $('#err-emailvld').fadeIn('slow'); // error - not right format
    20.          error = true;
    21.       }
    22.  
    23.       if(error == true) {
    24.          $('#err-form').slideDown('slow');
    25.          return false;
    26.       }
    27.  
    28.       var data_string = $('#ajax-form').serialize(); // Collect data from form
    29.  
    30.       $.ajax({
    31.          type: "POST",
    32.          url: $('#ajax-form').attr('action'),
    33.          data: data_string,
    34.          timeout: 6000,
    35.          error: function(request,error) {
    36.             if (error == "timeout") {
    37.                $('#err-timedout').slideDown('slow');
    38.             }
    39.             else {
    40.                $('#err-state').slideDown('slow');
    41.                $("#err-state").html('An error occurred: ' + error + '');
    42.             }
    43.          },
    44.          success: function() {
    45.             $('#ajax-form').slideUp('slow');
    46.             $('#ajaxsuccess').slideDown('slow');
    47.          }
    48.       });
    49.  
    50.       return false; // stops user browser being directed to the php file
    51.    }); // end click function
    52. });
    Остаётся только создать самому файл скрипа mail-it.php (отправки письма)!
    В интернете я нашёл вот такой скрипт:
    Код (Text):
    1.  <?php
    2.  
    3.   $mail = new Mail("no-reply@mysite.ru"); // Создаём экземпляр класса
    4.   $mail->setFromName("Иван Иванов"); // Устанавливаем имя в обратном адресе
    5.   if ($mail->send("abc@mail.ru", "Тестирование", "Тестирование<br /><b>письма<b>")) echo "Письмо отправлено";
    6.   else echo "Письмо не отправлено";
    7.  
    8. class Mail {
    9.  
    10.   private $from;
    11.   private $from_name = "";
    12.   private $type = "text/html";
    13.   private $encoding = "utf-8";
    14.   private $notify = false;
    15.  
    16.   /* Конструктор принимающий обратный e-mail адрес */
    17.   public function __construct($from) {
    18.     $this->from = $from;
    19.   }
    20.  
    21.   /* Изменение обратного e-mail адреса */
    22.   public function setFrom($from) {
    23.     $this->from = $from;
    24.   }
    25.  
    26.   /* Изменение имени в обратном адресе */
    27.   public function setFromName($from_name) {
    28.     $this->from_name = $from_name;
    29.   }
    30.  
    31.   /* Изменение типа содержимого письма */
    32.   public function setType($type) {
    33.     $this->type = $type;
    34.   }
    35.  
    36.   /* Нужно ли запрашивать подтверждение письма */
    37.   public function setNotify($notify) {
    38.     $this->notify = $notify;
    39.   }
    40.  
    41.   /* Изменение кодировки письма */
    42.   public function setEncoding($encoding) {
    43.     $this->encoding = $encoding;
    44.   }
    45.  
    46.   /* Метод отправки письма */
    47.   public function send($to, $subject, $message) {
    48.     $from = "=?utf-8?B?".base64_encode($this->from_name)."?="." <".$this->from.">"; // Кодируем обратный адрес (во избежание проблем с кодировкой)
    49.     $headers = "From: ".$from."\r\nReply-To: ".$from."\r\nContent-type: ".$this->type."; charset=".$this->encoding."\r\n"; // Устанавливаем необходимые заголовки письма
    50.     if ($this->notify) $headers .= "Disposition-Notification-To: ".$this->from."\r\n"; // Добавляем запрос подтверждения получения письма, если требуется
    51.     $subject = "=?utf-8?B?".base64_encode($subject)."?="; // Кодируем тему (во избежание проблем с кодировкой)
    52.     return mail($to, $subject, $message, $headers); // Отправляем письмо и возвращаем результат
    53.   }
    54.  
    55. }
    56. ?>
    Помогите подправить тот скрипт, с разъяснениями,так как я новичок и мне сложно самому понать и разобраться?!
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    mail();
     
  3. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    А зачем вы идете путем "Я хочу разобраться, как работает лампочка, поэтому купил себе автомобиль и пытаюсь разобраться в нем"?
    http://php.ru/manual/function.mail.html
     
  4. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    ,маэстро пробовал вот это,тоже не чего не вышло....подскажите поподробнее...
    Код (Text):
    1.  
    2. <?php
    3. // Сообщение
    4. $message = "Line 1\nLine 2\nLine 3";
    5.  
    6. // На случай если какая-то строка письма длиннее 200 символов мы используем wordwrap()
    7. $message = wordwrap($message, 200);
    8.  
    9. // Отправляем
    10. mail('моя@почта', 'My Subject', $message);
    11. ?>
     
  5. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Возможно, у вас просто не настроен почтовый сервер.
     
  6. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    при отправки почты пишет вот что ;
    [​IMG]
    а это сама форма;
    Код (Text):
    1.                 <div class="sixteen columns">
    2.                     <p class="subhead">ФОРМА ОТБРАТНОЙ СВЯЗИ!</p>
    3.                 </div>
    4.             </div>
    5.             <div id="contact-mes">
    6.                 <div class="container">
    7.                         <form name="ajax-form" id="ajax-form" action="mail-it.php" method="post">
    8.                     <div class="eight columns">
    9.                             <label for="name">Имя: *
    10.                                 <span class="error" id="err-name">В видите имя</span>
    11.                             </label>
    12.                             <input name="name" id="name" type="text" />
    13.                     </div>
    14.                     <div class="eight columns">
    15.                             <label for="email">E-Mail: *
    16.                                 <span class="error" id="err-email">Введите электронную почту</span>
    17.                                 <span class="error" id="err-emailvld">Электронная почта не является действительным форматом</span>
    18.                             </label>
    19.                             <input name="email" id="email" type="text" />
    20.                     </div>
    21.                     <div class="sixteen columns">
    22.                             <label for="message">Ваш текст:</label>
    23.                             <textarea name="message" id="message"></textarea>
    24.                             <button class="send_message" id="send">Отправить</button>
    25.                             <div class="error" id="err-form">Существует проблема отправки, проверте формат!</div>
    26.                             <div class="error" id="err-timedout">Соединение с сервером истекло!</div>
    27.                             <div class="error" id="err-state"></div>
    28.                     </div>
    29.                         </form>
    30.                         <div id="ajaxsuccess">Письмо успешно отправлено !!!</div>       
    31.                 </div>
    32.             </div>
     
  7. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Интерфейс вижу, код не вижу.
    И исправьте ошибки в тексте, что ли, что эта за "форма оТбратной связи!"?
     
  8. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    Код (Text):
    1. <?php
    2. // Сообщение
    3. $message = "Line 1\nLine 2\nLine 3";
    4.  
    5. // На случай если какая-то строка письма длиннее 200 символов мы используем wordwrap()
    6. $message = wordwrap($message, 200);
    7.  
    8. // Отправляем
    9. mail('моя@почта', 'My Subject', $message);
    10. ?>
    сайт залит на Hostinger
     
  9. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Навскидку:
    1. У вас может не вызываться сам скрипт. Вытащите его в отдельный файл, типа test_mail.php, вместо mail(....) напишите var_dump(mail(.....)) и посмотрите, что выведет, если этот test_mail.php открыть напрямую в браузере
    2. Возможно, на хостинге какие-то ограничения на отправку почты
    3. Возможно, на вашей@почте письмо уходит в спам (очень часто бывает)
     
  10. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    ,Добрый день у меня хостинг "HOSTINGER.RU"....сделал как вы написали не каких изменений.....может подскажите каким лучше хостингом пользоваться,желательно что бы он бесплатный был для того что бы можно было тестировать и учиться!например такой как ucoz,но с php бесплатно!
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а на локалке чего не поднять нужные сервисы?
     
  12. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    да я только учусь...поэтому мне пока сложно разобраться с чего начать и как!

    Добавлено спустя 1 минуту 39 секунд:
    .....расскажите поподробнее как на локальном сервере правильно проверить?! я поставил OpenServer
     
  13. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    залить в каталоги к которым ваш пакет openserver предоставляет http-доступ и зайти в браузере по нужному адресу.

    если честно я очень против всяких комплексов вроде денвера потому что он не позволяет вам думать. я году в 2005 тоже начинал с денвера, но уже году в 2006 понял что это не дает мне понять как всё это дело взаимодействует. в результате по манам, которые тут были выложены, сам поставил всё для wamp и сам потом руками правил конфиги. очень рекомендую пройти этот путь. и обязательно ознакомиться с rfc по основным технологиям с которыми так или иначе работаете.
     
  14. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    а можно ли переделать Скрипт отправки письма php на html, если можно то ка?
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    не понял сути вопроса. что значит переделать с php на html? хтмл это как бы статический язык разметки гипертекста. он не умеет письма отправлять. или вы хотите выполнять пхп в хтмл файлах? тогда нужно пхп-машине сказать чтоб она кушала хтмл файлы. но я бы убил за такое.
     
  16. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    а Вы бы не могли подправить до рабочего состояния и наглядно показать где были ошибки?
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    сколько?
     
  18. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    Ребята куда прописать свою почту в скрипте?
    Код (Text):
    1. <?php
    2. if (isset($_REQUEST['email']))
    3. //if "email" is filled out, send email
    4. {
    5. //send email
    6. $email = $_REQUEST['email'] ;
    7. $subject = "Mail test" ;
    8. $server = $_SERVER['HTTP_HOST'];
    9. $message = "If you got this message, mail sending from $server is working fine :)" ;
    10. mail( "$email", "$subject",
    11. $message, "From: mailtest@" . $_SERVER['HTTP_HOST'] );
    12. echo "Message has been sent to $email";
    13. }
    14. else
    15. //if "email" is not filled out, display the form
    16. {
    17. $server = $_SERVER[HTTP_HOST];
    18. echo "<h1>Mail test from $server</h1>
    19. <form method='post' action='" . $_SERVER['PHP_SELF'] . "'>
    20. Enter Your Email: <input name='email' type='text' /><br /><br />
    21. <input type='submit' name='Submit' value='Submit' />
    22. </form>";
    23. }
    24. ?>
     
  19. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в документации к функции mail() все четко написано. если куда письму лететь - в аргумент $to, если просто в письме прислать, то где-то в тексте аргумента $message. правильно?
     
  20. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    $message, "From: mailtest@" . $_SERVER['HTTP_HOST'] ); - правильно я вас понял?!
     
  21. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    смотря что именно вы пытаетесь сделать. отправка простого письма это невероятно простое действие. тут ещё нет разных представлений, вложений и тому подобного, с чем придется учить rfc по электронной почте. в интернете хренова туча примеров просто отправки письма. даже с немного усложненными алгоритмами вроде проверок полей. что вы пытаетесь сделать? пришел юзер - форма. отправил форму - проверка формы и отправка письма.

    я вас не сильно оскорблю повторением чуть ранее озвученного вопроса?

    сколько?

    кажется, вы не пытаетесь разобраться даже с чем-то простым. а я люблю хруст купюр в кошельке.
    а еще я делом помогаю на этом форуме. и очень люблю когда человек не ленится поискать по форуму. но безусловно когда у человека мозги кипят - хруст купюр в кошельке мне нравится больше ))))
     
  22. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    Да понял уже давно что ты хочешь денег!,если бы были ...я бы уже давно кому нибудь заплатил и не морочил бы себе и другим голову...я понимаю что ты в этом профи....но не забывай что и ты можешь когда та по какому то вопросу обратиться, и тебе точно так же скажут ,шелести бумагой......когда у тебя их не будет!......ладно всё это херня,вобщем если не кто помочь по человечески не может,то думаю можно тему закрыть и искать помощи на других форумах!
     
  23. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    нет, ты не понял. не денег я хочу. а чтоб ты голову включил. тут херова туча реализаций. возьми любую за основу, поковыряй и напиши сообщение не в стиле "взял топор. правильно делаю?" или "сжег корову. в том направлении двигаюсь?" или "прибил яйца к брусчатке. заработает?" а примерно такое:
    * делаю: if(){...}else{... mail(); ...}
    * ожидаю: проверку формы и 1) форму если она криво заполнена и 2) письмо если она вроде правильно заполнена. при этом 2.1) учитываю результат отправки письма.
    * имею: почему-то вместо моей формы открывается яндекс.ру и ничего не понятно.

    тогда это диалог по делу. ты вкладываешь свои силы в свой код и в свое развитие, а мы тебе помогаем развиваться в нужном направлении. всякие уставшие нытики вызывают только отвращение. устал - переспи с мыслью и приходи завтра. ноешь - попроси у матушки денег, пусть купюры зашуршат в кошельке человека, который не ноет. лепишь код тяп ляп вдруг прокатит - не прокатит.

    если я что-то могу сделать сам я делаю сам. если не могу - оплачиваю специалиста. это рынок. иногда могу но все равно оплачиваю специалиста. это благотворительность.

    Я тебе пытался помочь по-человечески, хотя ты и не соизволил выполнить положенный минимум проявления уважения к окружающим. например, вообще нет никакой отладки. откуда я знаю какая именно у тебя проблема? может ты на тостере пытаешься этот код выполнить. у меня вот почта ходит, всё настроено. у клиентов у моих ходит, спасибо мне, всё настроено. а у тебя не ходит. для начала докажи себе работоспособность своего скрипта на своей локалке, а потом залей рабочий сценарий к себе на хостинг. если не заработает - получи максимально возможную отладочную информацию. вдруг ее будет достаточно для багфикса. ну или если нет то тогда будет такой мегавариант как сношать техсап хостинга. согласись, пхп-ру не имеет отношения к тому что у тебя не работает почта. и тут нет телепатов которые скажут за тебя почему она у тебя не работает.

    хорошей тебе пятницы.
     
  24. Dirol

    Dirol Новичок

    С нами с:
    1 окт 2014
    Сообщения:
    25
    Симпатии:
    0
    если бы ты внимательно почитал все посты,где я писал что мало в этом понимаю и что пока не могу разобраться с чего начать,так как с этим не когда не сталкивался,а нужно было просто показать как правильно и грамотно написать скрипт,шаг за шагом и так далее.... и где и как поставить свою почту.....а ты если видишь что не получается,так подскажи...ты же спец...а не намикать о шелесте денег!....очень хорошо и понятно объясняет проблему Хыиуду!
     
  25. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну так задача-то какая? чтоб почта ходила сегодня? тогда быстрее аутсорс. чтоб понимать как это работает - курим ман столько сколько нужно для понимания. пока я указал четко на необходимость дебага. это значит какие ошибки твоя пхп-машина сыпит при выполнении данного кода. не знакомы с терминами - лезем читать раздел "на танке" и вновь пробуем получить отладочные данные.

    вот помоги мне. твой код с небольшими модификациями:
    Код (Text):
    1. if (isset($_REQUEST['email'])) {
    2.     $email = $_REQUEST['email'];
    3.     $subject = 'Mail test';
    4.     $message = "If you got this message, mail sending from {$_SERVER['HTTP_HOST']} is working fine :)";
    5.     $additional_headers = 'From: mailtest@' . $_SERVER['HTTP_HOST'];
    6.    
    7.     $result = @mail($email, $subject, $message, $additional_headers);
    8.    
    9.     echo ($result) ? 'OK' : 'FKUUUUCUCUCUCUUC!!!';
    10. } else {
    11.     ?><h1>Mail test from <?=$_SERVER[HTTP_HOST]?></h1>
    12. <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
    13.     Enter Your Email: <input name="email" type="text" /><br /><br />
    14.     <input type="submit" name="Submit" value="Submit" />
    15. </form><?php
    16. }
    по отправке формы мне дает в браузере:
    Код (Text):
    1. OK
    а на почтовую заглушку приходит:
    Код (Text):
    1. Return-Path: <unknown>
    2. Delivered-To: unknown
    3. X-Sendmail-Dummy: /usr/sbin/sendmail -t -i
    4. To: test@example.com
    5. Subject: Mail test
    6. X-PHP-Originating-Script: 1001:ru_php_forum_50241.php
    7. From: mailtest@example.com
    8.  
    9. If you got this message, mail sending from example.com is working fine :)
    что я делаю не так?