За последние 24 часа нас посетили 52778 программистов и 1768 роботов. Сейчас ищут 1038 программистов ...

Не работает скрипт отправки письма на почту

Тема в разделе "PHP для новичков", создана пользователем pavel8897, 18 сен 2017.

  1. pavel8897

    pavel8897 Новичок

    С нами с:
    13 сен 2017
    Сообщения:
    37
    Симпатии:
    0
    Здравствуйте! Подскажите пожалуйста, почему не работает скрипт отправки на почту?

    Код (Text):
    1.     <form action="index.php" method="POST">
    2.         <input name="numcas">
    3.         <input type="submit" onclick="send()" value="Отправить на почту">
    4.     </form>
    5.  
    6.     <?
    7.         $message = $_POST['numcas'];
    8.  
    9.         $to = "...@bk.ru";
    10.         $from = "center.org";
    11.     ?>
    12.  
    13.     <script>
    14.         function send(){
    15.             <?mail($to, $pagetitle, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: $to");?>
    16.         }
    17.     </script>
     
  2. xaker01

    xaker01 Активный пользователь

    С нами с:
    16 апр 2016
    Сообщения:
    210
    Симпатии:
    34
    Потому что при нажатии отправить на почту срабатывает JS а не PHP,
    игнорируя
    PHP:
    1. <?
    2.         $message = $_POST['numcas'];
    3.         $to = "...@bk.ru";
    4.         $from = "center.org";
    5.     ?>
    или наоборот, вообщем js тут не нужен
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    носорога с бульдогом скрестили (js и php)
    это js
    Код (Javascript):
    1. <script>
    2.         function send(){}
    3. </script>
    а сама функция на php
     
    xaker01 нравится это.
  4. pavel8897

    pavel8897 Новичок

    С нами с:
    13 сен 2017
    Сообщения:
    37
    Симпатии:
    0
    Сделал без JS, тоже не работат:
    Код (Text):
    1. <?
    2.     if(isset($_POST['submit'])){
    3.             $message = $_POST['numcas'];
    4.  
    5.             $to = "...@bk.ru";
    6.             $from = "center.org";
    7.             mail($to, $pagetitle, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: $to");
    8.            
    9.         }
    10.     ?>
     
  5. xaker01

    xaker01 Активный пользователь

    С нами с:
    16 апр 2016
    Сообщения:
    210
    Симпатии:
    34
    ONCLIC убрал js функцию в форме ?
    dkim spf настроен для почты ?
    А то какая почтовая служба приймет почту подозрительную ?
    минимум в спам закинет
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    PHP:
    1. <?
    2.             mail($to, $pagetitle, $message, "Content-  
    3. ?>
    с конкретными данными для теста сделай ... скорее всего тоже не отправится
    юзайте либу PHPMailer
     
  7. pavel8897

    pavel8897 Новичок

    С нами с:
    13 сен 2017
    Сообщения:
    37
    Симпатии:
    0
    Onclick убрал, да и с почтой все в порядке. Не понимаю, простой скрипт и не работает
    --- Добавлено ---
    Спасибо! Не отправляется все же
     
  8. xaker01

    xaker01 Активный пользователь

    С нами с:
    16 апр 2016
    Сообщения:
    210
    Симпатии:
    34
    Все же реши точно не отправляется или не принимается почтовиком.
     
  9. pavel8897

    pavel8897 Новичок

    С нами с:
    13 сен 2017
    Сообщения:
    37
    Симпатии:
    0
    Как узнать если почта не принимает?
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    никак, ибо тебе незачем знать.
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    index.php:
    PHP:
    1. <?php
    2.  
    3. if ( $_SERVER['REQUEST_METHOD'] === 'POST' )
    4. {
    5.    exit ( ( mail ( 'example@mail.ru', 'Lolosha', $_POST['numcas'] ?? 'капец' ) ? 'Ваше барахло успешно отправлено' : 'найн отправка' ) );
    6. }
    7.  
    8. ?>
    9. <form action="index.php" method="POST">
    10.    <input name="numcas">
    11.    <input type="submit" value="Отправить на почту">
    12. </form>

     
  12. pavel8897

    pavel8897 Новичок

    С нами с:
    13 сен 2017
    Сообщения:
    37
    Симпатии:
    0
    Спасибо большое! Но код почему то не работает. Видимо что то с почтой (
     
  13. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Стандартная функция mail() не всегда работает. В таких случаях поможет отправка через smtp (yandex.ru, gmail.com, ukr.net, etc.) по ssl протоколу. Нагуглил код от Евгения Ипатова (SendMailSmtpClass.php во вложении), использую его для отправки почты:
    PHP:
    1. // пример использования
    2.  
    3. $to = $_POST['to'];
    4. $subject = $_POST['subject'];
    5. $body = $_POST['body'];
    6.  
    7. require_once "SendMailSmtpClass.php"; // подключаем класс
    8.  
    9. $mailSMTP = new SendMailSmtpClass('admin@ukr.net', 'пароль_к_ящику', 'ssl://smtp.ukr.net', 'admin@ukr.net', 2525);
    10. // логин, пароль, хост, имя отправителя, порт);
    11.  
    12. // заголовок письма
    13. $headers = "MIME-Version: 1.0\r\n";
    14. $headers .= "Content-type: text/html; charset=utf-8\r\n";
    15. $headers .= "From: admin@ukr.net\r\n";
    16. $headers .= "Date: " . date('r') . "\r\n";
    17. $headers .= "X-Mailer: PHP/" . phpversion() . "\r\n";
    18.  
    19. $result =  $mailSMTP->send($to, $subject, $body, $headers); // отправляем письмо
    20. // $result =  $mailSMTP->send('Кому письмо', 'Тема письма', 'Текст письма', 'Заголовки письма');
    21. if($result === true){
    22.     echo "Письмо успешно отправлено";
    23. }else{
    24.     echo "Письмо не отправлено. Ошибка: " . $result;
    25. }
    Скрещивать js и php можно, но не в Вашем случае. Как правило, такое делается для создания динамического js-кода. В таких случаях лучше всего переименовать mycode.js в mycode.js.php, дабы не трогать файл .htaccess и дать понять пхп-машине, что в файле используется пхп-скрипт. Но важно понимать, что пхп-код будет выполнен при обращении к файлу, но никак не при нажатии кнопки.
    А вообще отправку почты лучше "повесить" на ajax без перезагрузки страницы. В заголовке формы дописываете:
    HTML:
    1. <form action="index.php" method="POST" onsubmit="send(); return false">
    В итоге, при сабмите, страница перезагружена не будет, но будет выполнена функция send(), в которой Вам нужно будет получить значения полей формы, аяксом передать эту информацию пхп-скрипту (аля send.php), который по смтп отправит сообщение на нужный ящик, вернет результат действия в функцию send(), которая уведомит пользователя о том, что сообщение отправлено или всё пропало.
    В общем, копайте в сторону ajax. Использовать post с перезагрузкой сайта - не очень красивое решение. И на начальном этапе старайтесь не скрещивать php и js, в большинстве случаев в этом нет необходимости.
     

    Вложения:

  14. pavel8897

    pavel8897 Новичок

    С нами с:
    13 сен 2017
    Сообщения:
    37
    Симпатии:
    0
    Спасибо! Буду пробовать!