K
K
Kostiantyn Kondratiuk2021-10-02 15:20:13
PHP
Kostiantyn Kondratiuk, 2021-10-02 15:20:13

PHPMailer form submission stopped working, why?

The site was uploaded to the hosting and tested - the data from the form came to my e-mail.
Then he began to fix the errors in the code that the Validator showed, and after that, when sent to the Chrome console, he writes an error:
Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
When expanding this error in the console, he writes that the type problem is in line 104 main.js file:

if (error === 0) {
            let response = await fetch('sendmail.php', {
                method: 'POST',
                body: formData
            });

Here from 103 to 107 lines.

This is the extended error:
<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 />


Explanation of the lines in the error from the PHPMailer.php file:
1917 line:
if (!$result) {
            throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL);
        }


1650 line:
case 'mail':
                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);


Line 1486: Line 66 of the sendmail.php file :
return $this->postSend();


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


Somewhere I probably made edits and because of this, the sending flew off. I checked everything on the video that I watched and sent - it seems that everything is correctly spelled out.
How to debug PHPMailer.php and sendmail.php file? Or how to find out where the error is and fix it?

I did not go into PHPMailer.php at all and downloaded it fresh yesterday. And here is the sendmail.php code here:
<?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('[email protected]', 'Добрий вірш');
    // Кому відправити. Може бути кілька адрес
    // (Who to send to. There may be several addresses)
    $mail->addAddress('[email protected]');
    // Тема листа
    // (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);
?>

Answer the question

In order to leave comments, you need to log in

1 answer(s)
K
Kostiantyn Kondratiuk, 2021-10-03
@Kinderman

I found a solution in a day and it turned out to be on the hosting side:
https://www.ukraine.com.ua/wiki/hosting/mail/issue...
(Instead of the mailbox specified as outgoing mail, select "- Select e- mail -").
Although I asked their support and they answered that they have no prohibitions and no problems.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question