Сайт залил на хостинг и протестировал - данные с формы приходили на мой 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->mailSend('Date: Sat, 2 Oc...', '<h1>\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->postSend()
#2 /home/konkos/konkos.net/poet/sendmail.php(166): PHPMailer\PHPMailer\PHPMailer->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);
?>