Kinderman
@Kinderman
Front-end Developer

Перестала срабатывать отправка формы с помощью PHPMailer, почему?

Сайт залил на хостинг и протестировал - данные с формы приходили на мой e-mail.
Потом начал исправлять ошибки в коде, которые показал Валидатор и после этого при отправке в консоли Хрома пишет ошибку:
Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
При разворачивании этой ошибки в консоли пишет, что проблема типа в 104 строке файла main.js:
if (error === 0) {
            let response = await fetch('sendmail.php', {
                method: 'POST',
                body: formData
            });

Тут из 103 по 107-ю строку.

Это развёрнутая ошибка:
<br />
<b>Fatal error</b>:  Uncaught PHPMailer\PHPMailer\Exception: Неможливо запустити функцію mail(). in /home/konkos/konkos.net/poet/phpmailer/src/PHPMailer.php:1917
Stack trace:
#0 /home/konkos/konkos.net/poet/phpmailer/src/PHPMailer.php(1650): PHPMailer\PHPMailer\PHPMailer-&gt;mailSend('Date: Sat, 2 Oc...', '&lt;h1&gt;\xD0\x9A\xD0\xBE\xD0\xBD\xD1\x82\xD0\xB0\xD0...')
#1 /home/konkos/konkos.net/poet/phpmailer/src/PHPMailer.php(1486): PHPMailer\PHPMailer\PHPMailer-&gt;postSend()
#2 /home/konkos/konkos.net/poet/sendmail.php(166): PHPMailer\PHPMailer\PHPMailer-&gt;send()
#3 {main}
  thrown in <b>/home/konkos/konkos.net/poet/phpmailer/src/PHPMailer.php</b> on line <b>1917</b><br />


Расшифровка строк в ошибке из файла PHPMailer.php:
1917 строка:
if (!$result) {
            throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL);
        }


1650 строка:
case 'mail':
                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);


1486 строка:
return $this->postSend();

66 строка файла sendmail.php:
if (!$mail->send()) {
        $message = 'Помилка';
    } else {
        $message = 'Ваші дані успішно відправлені!';
    }


Где-то внёс, наверное, правки и из-за этого отправка слетела. Проверял все по видео, которое смотрел и делал отправку - вроде-бы всё правильно прописано.
Как дебажить файл PHPMailer.php и sendmail.php? Или как узнать где ошибка и устранить ее?

В PHPMailer.php я не лез вообще и скачал его вчера свежий. А вот код sendmail.php здесь:
<?php
// Підключення файлів з папки PHPMailer для роботи плагіну
// (Connect files from PHPMailer folder to plug-in)
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;

    require 'phpmailer/src/Exception.php';
    require 'phpmailer/src/PHPMailer.php';

    // Оголошую плагін
    // (I declare the plugin)
    $mail = new PHPMailer(true);
    // Налаштування кодування щоб уникнути каракуль у листі
    // (Coding settings to avoid doodles in the letter)
    $mail->CharSet = 'UTF-8';
    // Підключення мовного файлу щоб помилки були зрозумілі при виводі
    // (Connect a language file so that errors are clear when outputting)
    $mail->setLanguage('uk', 'phpmailer/language/');
    // Включається можливість html тегів у листі
    // (The possibility of html tags in the letter is included)
    $mail->IsHTML(true);

    // Від кого лист
    // (From whom the letter)
    $mail->setFrom('poet@konkos.net', 'Добрий вірш');
    // Кому відправити. Може бути кілька адрес
    // (Who to send to. There may be several addresses)
    $mail->addAddress('poet@konkos.net');
    // Тема листа
    // (Subject)
    $mail->Subject = 'Нове замовлення!';


    // Тіло листа
    // (The body of the letter)
    $body = '<h1>Контактні дані (Замовник)</h1>';
// Далі прості перевірки - if поле не пусте то вивести в <p> лейбл і присвоїти відповідне ім'я поля
// (Next, simple checks - if the field is not empty, then output to the <p> label and assign the appropriate field name)
    if(trim(!empty($_POST['name']))) {
        $body.='<p class="font"><strong>Прізвище та Ім\'я:</strong> '.$_POST['name'].'</p>';
    }

    if(trim(!empty($_POST['phone']))) {
        $body.='<p><strong>Телефон:</strong> '.$_POST['phone'].'</p>';
    }

    if(trim(!empty($_POST['email']))) {
        $body.='<p><strong>Email:</strong> '.$_POST['email'].'</p>';
    }

    $body.='<h2><strong>Найзручніший спосіб спілкування</strong><br></h2>';
        
    $contact = '<p>"Telegram"</p>';
    if($_POST['contact'] == "phone"){
        $contact = '<p>"Телефон"</p>';
    } 
    if($_POST['contact'] == "email"){
        $contact = '<p>"Email"</p>';
    } 
    if($_POST['contact'] == "viber"){
        $contact = '<p>"Viber"</p>';
    } 
    if($_POST['contact'] == "skype"){
        $contact = '<p>"Skype"</p>';
    }
    
    $body.= $contact;

    $body.='<h2><strong>Спосіб оплати</strong><br></h2>';
    //Обертаю 2 варіанти оплати у <p> обгортку тому, що при виводі результатів на електронну пошту не стилізується сам вибір юзера
    // (I wrap 2 options of payment in <p> because at an output of results on e-mail the choice of the user is not stylized)
    $pay = '<p>"Передоплата на карту"</p>';
    if($_POST['pay'] == "pay-after"){
        $pay = '<p>"Оплата на карту після отримання вірша"</p>';
    }
    
    $body.= $pay;

    $body.= '<h2>Дані про героя/героїню вірша!</h2>';

    if(trim(!empty($_POST['name-guest']))) {
        $body.='<p><strong>1. Прізвище та ім\'я людини, якій ви
        присвячуєте вірш</strong><br> '.$_POST['name-guest'].'</p>';
    }

    if(trim(!empty($_POST['relationship']))) {
        $body.='<p><strong>2. У яких стосунках ви перебуваєте з
        героєм/героїнею
        вірша?</strong> <i>(Наприклад, дружина, хлопець, колега по роботі, подруга, мама, тесть і т.п.)</i><br> '.$_POST['relationship'].'</p>';
    }

    if(trim(!empty($_POST['ncharacter-traits']))) {
        $body.='<p><strong>3. На які риси людини ви хотіли б акцентувати увагу? Тип характеру, тип поведінки.</strong><br> '.$_POST['ncharacter-traits'].'</p>';
    }

    if(trim(!empty($_POST['looks-like']))) {
        $body.='<p><strong>4. Як виглядає людина: тип статури (стрункий, спортивний, худорлявий, повний), колір
        волосся, колір очей, губи, форми особи, тощо.</strong><br> '.$_POST['looks-like'].'</p>';
    }

    if(trim(!empty($_POST['family-status']))) {
        $body.='<p><strong>5. Сімейний стан героя вірша. Якщо є діти і варто їх згадати у вірші – напишіть, коли вони
        народилися, яке відношення людини до них, тощо.</strong><br> '.$_POST['family-status'].'</p>';
    }

    if(trim(!empty($_POST['hobbies']))) {
        $body.='<p><strong>6. Які захоплення є у цієї людини?</strong> <i>(Наприклад: спорт, колекціонування, караоке, трудоголік і т.п.)</i><br> '.$_POST['hobbies'].'</p>';
    }

    if(trim(!empty($_POST['life-moments']))) {
        $body.='<p><strong>7. Які життєві моменти людини потрібно відобразити?</strong> <i>(Наприклад, де вчився, де і ким працював, як себе зарекомендував, тощо.)</i><br> '.$_POST['life-moments'].'</p>';
    }

    if(trim(!empty($_POST['curious-moments']))) {
        $body.='<p><strong>8. Які курйозні моменти в житті людини можна згадати у вірші? Чим більше буде таких моментів тим веселіше буде вірш:</strong><br> '.$_POST['curious-moments'].'</p>';
    }

    $body.= '<h2>Побажання до самого вірша</h2>';

    if(trim(!empty($_POST['desired-release']))) {
        $body.='<p><strong>1. Бажана дата виходу готового вірша</strong><br> '.$_POST['desired-release'].'</p>';
    }
    
    if(trim(!empty($_POST['desired-release']))) {
        $body.='<p><strong>2. Бажаний об’єм вірша в куплетах (1 куплет - 4 рядки)</strong><br> '.$_POST['desired-release'].'</p>';
    }

    if(trim(!empty($_POST['theme-poem']))) {
        $body.='<p><strong>3. Тема вірша</strong> <i>(Наприклад, день народження, ювілей, весілля, вливання у колектив, тощо)</i><br> '.$_POST['htheme-poem'].'</p>';
    }

    if(trim(!empty($_POST['feelings-poem']))) {
        $body.='<p><strong>4. Які почуття має донести вірш?</strong> <i>(Наприклад, кохання, дружба, повага, приятельський жарт тощо)</i><br> '.$_POST['feelings-poem'].'</p>';
    }

    if(trim(!empty($_POST['desired-style']))) {
        $body.='<p><strong>5. Бажаний стиль початку вірша</strong> <i>(Наприклад, більш офіційний стиль або якщо це близький друг чи родич − дружній та веселий стиль і т.п.)</i><br> '.$_POST['desired-style'].'</p>';
    }

    if(trim(!empty($_POST['additional-wishes']))) {
        $body.='<p><strong>6. Додаткові побажання до вірша</strong><br> '.$_POST['additional-wishes'].'</p>';
    }
    
    // Стилізація результатів, що приходять на електронну пошту
    // (Stylization of results coming to e-mail)
    $body.= '<style>
    p {
        font-size: 20px;
    }

    h2 {
        font-size: 25px;
    }
    
    h1, h2 {
    text-decoration: underline;
    text-align:  center;
    }
    </style>';
    

    $mail->Body = $body;

    // Відправляю. Обробник відправлення
    // (I send. Shipment handler)
    if (!$mail->send()) {
        $message = 'Помилка';
    } else {
        $message = 'Ваші дані успішно відправлені!';
    }

    // Формуємо з цього обробника json меседж, якому буде присвоєна помилка або, що дані відправлені
    // (We form from this handler json the message to which the error will be appropriated or that the data is sent)
    $response = ['message' => $message];

// І із заголовком json (1й рядок) повертаю у свій js (2й рядок)
// (And with the title json (1st line) I return to my js (2nd line))
    header('Content-type: application/json');
    echo json_encode($response);
?>
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
Kinderman
@Kinderman Автор вопроса
Front-end Developer
За день нашёл решение и оно оказалось на стороне хостинга:

https://www.ukraine.com.ua/wiki/hosting/mail/issue...

(Вместо почтового ящика, указанного в качестве исходящей почты, выберите «- Выберите e-mail -»).

Хоть у их саппорта спрашивал и они ответили что у них никаких запретов и проблем нет .
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы