• Почему phpmailer не отправляет письмо с ajax при нажатии по кнопке?

    @Sanchez9891 Автор вопроса
    AUser0, сделал ещё console.log(msg) в else перед $('#submit').next().text('Ошибка!'); и он мне выдал просто код из index.php. Получается, проблема здесь кроется именно в запросе ajax, а не php.
    Он же по идее должен выводить данные из формы, не более? Или я ошибаюсь? Точнее в моем случае, он должен вроде как выводить то, что ему задали в строке $mail->body
  • Почему phpmailer не отправляет письмо с ajax при нажатии по кнопке?

    @Sanchez9891 Автор вопроса
    AUser0, на этой вкладке вывелся код из файла index.php, за исключением кода из php тега.

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <title>requestkraftway</title>
        
    <link rel="stylesheet" href="css/style.css">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
      </head>
      <body>
        
        <div class="container">
          <div class="row">
            <div class="col-6 offset-3">
              <div id="app">
                <form action="" method="POST" name="request" id="request">
                  <h1>{{ msg }}</h1>
                  <div class="form-group">
                    <label for="exampleInputEmail1">Номер магазина: </label>
                    <select v-model="selectedUser" class="form-control">
                      <option name="number" v-for="site in sites" v-bind:value="site">{{site.name}}</option>
                    </select>
                  </div>
                  <div class="form-group">
                    <label for="exampleInputPassword1">Адрес магазина: </label>
                    <span v-if="selectedUser!==null" class="address form-control">{{selectedUser.address}}</span>
                  </div>
                  <div class="form-group">
                    <label for="">Заявитель (инициатор заявки)</label>
                    <input name="applicant" type="text" class="form-control"><span></span>
                  </div>
                  <div class="form-group">
                    <label for="">Телефон заявителя</label>
                    <input name="applicant_tel" type="text" class="form-control"><span></span>
                  </div>
                  <button type="submit" id="submit" name="submit" class="btn btn-primary">Submit</button><span></span>
                </form>
              </div>
            </div>
          </div>
        </div>
            <script src="https://unpkg.com/vue"></script>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    sites:[
                        {name:'203', address:''},
                        {name:'452', address:''},
                        
                    ],
                    selectedUser: 'Выбери номер магазина',
                    msg: ''
                },
                
            });
            
            $(function(){
              'use strict';
                $('#request').on('submit', function(e){
                  e.preventDefault();
                  $.ajax({
                    url:'index.php',
                    type: 'POST',
                    contentType: false,
                    processData:false,
                    success: function(msg){
                      if(msg == 'ok'){
                        $('#sumbit').next().text('Отправлено!');
                      }else{
                        $('#submit').next().text('Ошибка!');
                      }
                    }
                  })
                })
            })
        </script>
      </body>
    </html>
  • Почему phpmailer не отправляет письмо с ajax при нажатии по кнопке?

    @Sanchez9891 Автор вопроса
    Да, AJAX-запрос делается к файлу index.php. Весь этот код находится в этом же файле index.php.

    По запросу на скриншотах.
    5c604b17deab8815693474.jpeg
    anonymus ссылается на 68 строчку кода, то есть на ajax...
    5c604b3238b85011309999.jpeg

    Во вкладке network при нажатии на кнопку, появляется файл index.php
    5c604c63c1878095069847.png

    Вы правы, это просто текст указан для сокрытия реальных SMTP-данных
  • Почему phpmailer не отправляет письмо с ajax при нажатии по кнопке?

    @Sanchez9891 Автор вопроса
    morricone85, добавил имя в input (applicant) и изменил условие на if (!empty($_POST['applicant'])).
    По идее же, условие проверяет, если applicant не пустой, выполнить код ниже, но не работает...

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <title>requestkraftway</title>
        <link rel="stylesheet" href="css/style.css">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
      </head>
      <body>
        
        <div class="container">
          <div class="row">
            <div class="col-6 offset-3">
              <div id="app">
                <form action="" method="POST" name="request" id="request">
                  <h1>{{ msg }}</h1>
                  <div class="form-group">
                    <label for="exampleInputEmail1">Номер магазина: </label>
                    <select v-model="selectedUser" class="form-control">
                      <option name="number" v-for="site in sites" v-bind:value="site">{{site.name}}</option>
                    </select>
                  </div>
                  <div class="form-group">
                    <label for="exampleInputPassword1">Адрес магазина: </label>
                    <span v-if="selectedUser!==null" class="address form-control">{{selectedUser.address}}</span>
                  </div>
                  <div class="form-group">
                    <label for="">Заявитель (инициатор заявки)</label>
                    <input name="applicant" type="text" class="form-control"><span></span>
                  </div>
                  <div class="form-group">
                    <label for="">Телефон заявителя</label>
                    <input name="applicant_tel" type="text" class="form-control"><span></span>
                  </div>
                  <button type="submit" id="submit" name="submit" class="btn btn-primary">Submit</button><span></span>
                </form>
              </div>
            </div>
          </div>
        </div>
        <?php 
        if (!empty($_POST['applicant'])){
          require 'phpmailer/class.phpmailer.php';
          require 'phpmailer/class.smtp.php';
    
          $mail = new PHPMailer;
    
          $mail->isSMTP();
    
          $mail->Host = 'smtp.gmail.com';
          $mail->SMTPAuth = true;
          $mail->Username = 'mail@gmail.com'; // логин от вашей почты
          $mail->Password = ''; // пароль от почтового ящика
          $mail->SMTPSecure = 'ssl';
          $mail->Port = '465';
    
          $mail->CharSet = 'UTF-8';
          $mail->setFrom = 'mail@gmail.com'; // адрес почты, с которой идет отправка
          $mail->FromName = 'Александр'; // имя отправителя
          $mail->addAddress('mail@yandex.ru', 'Александр');
          // $mail->addAddress('email2@email.com', 'Имя 2');
          // $mail->addCC('email3@email.com');
          // $mail->SMTPDebug = 1;
    
          $mail->isHTML(true);
    
          $mail->Subject = 'Тема письма';
          $mail->Body = "Номер магазина:  {$_POST["number"]}";
    
          if(!$mail->send()) {
            echo 'Message could not be sent.';
            echo 'Mailer Error: ' . $mail->ErrorInfo;
           } else {
            echo 'ok';
           }
           print_r($_POST, true);
          }
          
        ?>
        <script src="https://unpkg.com/vue"></script>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    sites:[
                        {name:'203', address:''},
                        {name:'452', address:''},
                        
                    ],
                    selectedUser: 'Выбери номер магазина',
                    msg: ''
                },
                
            });
            
            $(function(){
              'use strict';
                $('#request').on('submit', function(e){
                  e.preventDefault();
                  $.ajax({
                    url:'index.php',
                    type: 'POST',
                    contentType: false,
                    processData:false,
                    success: function(msg){
                      if(msg == 'ok'){
                        $('#sumbit').next().text('Отправлено!');
                      }else{
                        $('#submit').next().text('Ошибка!');
                      }
                    }
                  })
                })
            })
        </script>
      </body>
    </html>
  • Почему phpmailer не отправляет письмо с ajax при нажатии по кнопке?

    @Sanchez9891 Автор вопроса
    AUser0, не могу понять, почему print_r ничего не выходит. Ведь он должен выводить прямо в браузер или смотреть в devtools? :(
    Письмо так и не отправляется, хотел посмотреть вывод, чтобы понимать, куда дальше смотреть, а и тут тупик...
  • Почему phpmailer не отправляет письмо с ajax при нажатии по кнопке?

    @Sanchez9891 Автор вопроса
    morricone85, я думал, что условию надо передать id формы, но похоже глубоко ошибался :)
  • Почему phpmailer не отправляет письмо с ajax при нажатии по кнопке?

    @Sanchez9891 Автор вопроса
    Я так понимаю, уже, что этот код проверяет, есть ли в $_POST (то есть в форме) идентификатор request и возвращает true или false. По моей логике, если true, значит код ниже должен выполняться. Хотя сейчас я понимаю (как выше подсказали), неправильное условие было. Только после смены условия, код всё равно не хочет работать.
  • Почему phpmailer не отправляет письмо с ajax при нажатии по кнопке?

    @Sanchez9891 Автор вопроса
    А вы написали print_r внутри не работующего if (isset($_POST['#request']))?

    Да

    Ниже часть измененного кода, я правильно сделал?
    В <input> добавил атрибут name и в php коде изменил условие.

    <div class="container">
          <div class="row">
            <div class="col-6 offset-3">
              <div id="app">
                <form action="" method="POST" name="request" id="request">
                  <h1>{{ msg }}</h1>
                  <div class="form-group">
                    <label for="exampleInputEmail1">Номер магазина: </label>
                    <select v-model="selectedUser" class="form-control">
                      <option name="number" v-for="site in sites" v-bind:value="site">{{site.name}}</option>
                    </select>
                  </div>
                  <div class="form-group">
                    <label for="exampleInputPassword1">Адрес магазина: </label>
                    <span v-if="selectedUser!==null" class="address form-control">{{selectedUser.address}}</span>
                  </div>
                  <div class="form-group">
                    <label for="">Заявитель (инициатор заявки)</label>
                    <input name="applicant" type="text" class="form-control"><span></span>
                  </div>
                  <div class="form-group">
                    <label for="">Телефон заявителя</label>
                    <input name="applicant_tel" type="text" class="form-control"><span></span>
                  </div>
                  <button type="submit" id="submit" name="submit" class="btn btn-primary">Submit</button><span></span>
                </form>
              </div>
            </div>
          </div>
        </div>
        <?php 
        if (!empty($_POST['applicant'])){
          require 'phpmailer/class.phpmailer.php';
          require 'phpmailer/class.smtp.php';
    
          $mail = new PHPMailer;
    
          $mail->isSMTP();
    
         $mail->Host = 'smtp.gmail.com';
              $mail->SMTPAuth = true;
              $mail->Username = 'mail@gmail.com'; // логин от вашей почты
              $mail->Password = 'test'; // пароль от почтового ящика
              $mail->SMTPSecure = 'ssl';
              $mail->Port = '465';
    
              $mail->CharSet = 'UTF-8';
              $mail->setFrom = 'mail@gmail.com'; // адрес почты, с которой идет отправка
              $mail->FromName = 'Александр'; // имя отправителя
              $mail->addAddress('mail@yandex.ru', 'Александр');
              // $mail->SMTPDebug = 1;
    
              $mail->isHTML(true);
    
              $mail->Subject = 'Тема письма';
              $mail->Body = 'Привет, мир! <p>Это строка <b>HTML кода</b></p>';
    
          if(!$mail->send()) {
            echo 'Message could not be sent.';
            echo 'Mailer Error: ' . $mail->ErrorInfo;
           } else {
            echo 'ok';
           }
          }
          print_r($_POST, true);
        ?>
  • Почему phpmailer не отправляет письмо с ajax при нажатии по кнопке?

    @Sanchez9891 Автор вопроса
    Что-то у меня ничего не выводится через print_r($_POST, true).
    name=xxx я буду позже делать, по идее они же не должны пока участвовать в отправке письма.
    Может я плохо понимаю ещё в данной теме, но в php уже объявлены переменные BODY, SUBJECT...И кнопкой мы должны просто запустить php скрипт, который отправит письмо?
    Можно Вас попросить более детально описать, где что убрать или добавить или заменить в коде...