I
I
Icaab2021-06-08 20:08:00
PHP
Icaab, 2021-06-08 20:08:00

Error 500 in Phpmailer. Complains about fetch?

Hello. I made a form with sending one video at a time. Phpmailer is the latest, php hosting the latest version. Checked, but to no avail: gives the word "Error" from the php file and the following in the console:
60bfa146d136c616088202.png

Complains about this line in the js file:
60bfa1719d824636140030.png

My code from each file:

HTML
<div id="contact" class="FormBack">
  <div class="form">
  <!-- форма конечно будет отправляться за счет JS - action не
  нужен, но ставим его с заглушкой, что ВАЛИДАТОР правильно работал-->
    
  <div class="Smart"></div>
  <div class="Smart2"></div>		
    
  <form action="#" id="form" class="form_body">
      <h1 class="form_title">Отправить нам сообщение</h1>
      <div class="form_item">
          <!-- label будет привязан к formName -->
          <label for = "formName" class="form_label">Имя:</label>
          <input id="formName" type="text" name="Name" class="form_input _Req">
      </div>
      <div class="form_item">
          <label for = "formEmail" class="form_label">E-mail:</label>
          <input id="formEmail" type="text" name="Email" class="form_input _Req _Email">
      </div>
      <div class="form_item">
          <label for = "formMessage" class="form_label">Сообщение:</label>
          <textarea name="Message" id="formMessage" class="form_input _Req"></textarea>
      </div>
      <div class="form_item">
          <div class="checkbox">
              <input id="formAgree" type="checkbox" name="Agree" class="checkbox_input _Req">
              <label for = "formAgree" class="checkbox_label"><span>Я даю свое согласие на обработку моих персональных данных</span></label>
          </div>
      </div>
              <button type="submit" class="form_button"></button>
  </form>
  </div>
</div>


In js, validation is written in the second part of the code, if anything
JavaScript
document.onreadystatechange = function(){
  //Перехват формы отправки после нажатия кнопки
  const form = document.getElementById('form');
  //Вешаю событие submit на эту переменную
  //и как отправив форму - переходим к formSend
  form.addEventListener('submit', formSend);
  
  async function formSend(Er)
  {
    //Запрет стандартной отправки(без заполнения)
    Er.preventDefault(); 
    //Теперь пропишем в js - что ДОЛЖНО выполняться
    //после отправки
    
    //ВАЛИДАЦИЯ
    let Error = formValidate(form);
    
    //Получаем все данные заполненных полей
    let formData = new FormData(form);
    
    //За счет AJAX(fetch) будем делать отправку данных
    if(Error === 0){
      //Как стало ясно, что ошибок нет - добавляем к форме
      //класс _sending и СООБЩАЕМ ПОЛЬЗОВАТЕЛЮ ОБ 			
      form.classList.add('_sending');
      
      //В переменную response помещаем ожидание выполнения
      //ОТПРАВКИ в файл php методом POST и данных formData
      
      let Response = await fetch('sendmail.php',{
        method: 'POST',
        body: formData				  
      });
      
      //Проверка на успешность отправки данных
      //sendmail будет возвращать JSON-ответ
      //и в случае успеха - будем получать то,
      //что в if
      if(Response.ok){
        let Result = await Response.json();
        alert(Result.Message);
        //После отправки формы - чистим ее
        form.reset();
        //Убираем высвечивание загрузки
        form.classList.remove('_sending');
      }
      else{
        alert("Ошибка");
        //Просто убираем этот класс в случае
        //ошибки, чтоб загрузка не вылезла
        form.classList.remove('_sending');
      }
      
    //Если Error не равно нулю - что выводить
    
    
  }
    else{
      alert('Заполнить обязательные поля!');
    }
}
    
    function formValidate(form){
      let Error = 0;
      //Класс req испольузем для проверки полей и добавл в html
      let formReq = document.querySelectorAll('._Req');
      //Создаем цикл, чтобы бегать по объектам, которым задали
      //класс req для проверки
      for (let index = 0; index < formReq.length; index++){
        //Объект input помещается в константу input
        const input = formReq[index];
        //Изначально перед проверкой убираем класс Error
        formRemoveError(input);
        
        //Сама проверка
        //У каждого поля будет своя проверка и потому у всех разные классы
        if(input.classList.contains('_Email')){
          //Если тест не пройден
          if (EmailTest(input)){
            formAddError(input);
            //Увеличиваем error на единицу
            Error++;
          }
        }
        //Наличие проверки checkbox
        //Проверка, что чекбокс и если бокс не включен
        else if (input.getAttribute("type") === "checkbox" && input.checked === false){
          //И вешаем на класс и его родителя ошибку
          
          formAddError(input);
          Error++;
             
         }
        else {
          //Если поле пустое, то
          if(input.value === ''){
            formAddError(input);
            Error++;
          }
        }
      }
      //Возвращаем значение нуля
      return Error;
    }
    
    

    
    //1 Функция для добавления объекту класса Error
    // и родительскому тоже(чтоб вместе горели красным)
    //2 функция наоборот УБИРАЕТ этот класс
    function formAddError(input){
      input.parentElement.classList.add('_Error');
      input.classList.add('_Error');
    }
    function formRemoveError(input){
      input.parentElement.classList.remove('_Error');
      input.classList.remove('_Error');
    }
    //Тест email
    function EmailTest(input){
      return !/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(input.value);
    }
    
    
  }


PHP
<?php
  //Загрузка необходимых файлов PHPMailer'а 
  use PHPMailer\PHPMailer\PHPMailer;
  use PHPMailer\PHPMailer\Exception;
  require 'phpmailer/src/Exception.php';
  require 'phpmailer/src/PHPMailer.php';
  
  //Объявляем PHPMailer 
  $mail = new PHPMailer(true);
  //Настройка кодировки
  $mail->CharSet = 'UTF-8';
  //Языковой файл из папки PHPMailer(ошибки поймем тоже) 
  $mail->setLanguage('ru', 'phpmailer/language/');
  //Включение html-тэгов в письме
  $mail->IsHTML(true);
  
  $mail->SMTPDebug = 2;
  
  //От кого
  $mail->setFrom('[email protected]', '');
  //Кому
  $mail->addAddress('[email protected]');
  //Тема
  $mail->Subject = 'Ваш сайт был кем-то замечен!';
  
  //Тело письма
  $body = '<h1>Неожиданно!Не правда ли?</h1>';
  
  //Проверки полей на пустоту (на всякий)
  if(trim(!empty($_POST['Name']))){
    $body.='<p><strong>Имя: </strong> '.$_POST['Name'].'</p>';
  }
  
  if(trim(!empty($_POST['Email']))){
    $body.='<p><strong>E-mail: </strong> '.$_POST['Email'].'</p>';
  }
  
  if(trim(!empty($_POST['Message']))){
    $body.='<p><strong>Сообщение: </strong> '.$_POST['Message'].'</p>';
  }
  
  $mail->$body;
  
  //Отправка
  //Если форма не отправилась - выводит ошибку
  if (!$mail->send()){
    $Message = 'Ошибка';
  }
  else
  {
    $Message = 'Данные отправлены';
  }
  
  //Формирование JSON для присваивания сообщения
  //что должно выводится при отправки
  //и чтоб мы получили в ответ нужное сообщение
  $Response = ['Message' => $Message];
  
  header('Content-type: application/json');
  //Возвращаем в JS с заголовком json
  echo json_encode($Response);
    
  
  error_reporting(E_ALL);
    ini_set('display_errors', 1);	
    
?>


Maybe the phpmailer design rules have changed and I'm behind the times? (hosting I use handyhost) I

also found a hex code in the error log, which gives the following output:
60bfa921debc2636766243.png

Answer the question

In order to leave comments, you need to log in

3 answer(s)
A
Adamos, 2021-06-08
@Adamos

gives the word "Error" from the php file

No. Your puff drops to 500. And the word gives out Look at the puff logs. For example, he might not find those files in require with a relative path. Or he does not like that first use, and then - where to get the classes for this use.
alert("Ошибка");

L
Lev Zabudkin, 2021-06-08
@zabudkin

So read what is written in \xd0....
https://stackoverflow.com/questions/13774215/conve...

H
HelpingBlind, 2021-08-18
@HelpingBlind

Brother. How did you end up solving the problem with fetch? I get a similar error and everything that was possible, I checked. Suddenly I didn't see a pitfall

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question