@veroni1337

Почему phpmailer выдает 500 оишбку в wordpress?

У меня на wordpress сайте не работает форма обратной связи. Скажу честно форму полностью скопировал у ютубера "фрилансер по жизни xD". Форма выдает 500 ошибку. Вот код:

1) js

document.addEventListener('DOMContentLoaded', function() {
        const formVacancie = document.getElementById('form__vacancie');
        formVacancie.addEventListener('submit', formVacancieSend);

        async function formVacancieSend(e) {
            e.preventDefault();

            let error = formValidate(formVacancie);

            let formData = new FormData(formVacancie);
            formData.append('image', formFile.files[0]);

            if (error === 0 ) {
                formVacancie.classList.add('_sending');
                let response = await fetch('/wp-content/themes/kisc/mail.php', {
                    method: 'POST';
                    body: formData
                });
                if(response.ok) {
                    let result = await response.json();
                    document.getElementById('about-blog-succes').style.display = 'block';
                    document.getElementById('vacancie-feedback').style.display = 'none';
                    formVacancie.reset();
                } else {
                    alert('Ошибка');
                    formVacancie.classList.remove('_sending');
                }
            } else {
                alert('Заполните обязательные поля');
            }
        }

        function formValidate(form) {
            let error = 0;
            let formReq = document.querySelectorAll('._req');

            for ( let index = 0; index < formReq.length; index++) {
                const input = formReq[index];
                formRemoveError(input);

                if( input.classList.contains['_email'] ) {
                    if( emailTest(input) ) {
                        formAddError(input);
                        error++;
                    }
                } else if( input.getAttribute("type") === 'checkbox' && input.checked === false) {
                    formAddError(input);
                    error++;
                } else {
                    if (input.value === '') {
                        formAddError(input);
                        error++;
                    }
                }
            }
            return error;
        }
        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 /^[\w-\.]+@[\w-]+\.[a-z]{2,4}$/i.test(input.value);
        }

        // добавление файла
        const formFile = document.getElementById('file');

        // изменения в инпуте file
        formFile.addEventListener('change', () => {
            uploadFile( formFile.files[0] );
        });

        function uploadFile(file) {
            // проверка типа файла
            if(!['image/jpeg', 'image/png', 'image/gif', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/pdf'].includes(file.type)) {
                alert('Данное расширение файла нельзя загрузить.');
                formFile.value = '';
                return;
            }
            // проверка размера файла (<10мб)
            if ( file.size > 3 *1024 *1024 ) {
                alert('Файл не должен быть больше 3мб.');
                return;
            }
        }
    });


2) php
// Подключаем библиотеку PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require '/wp-content/themes/test/assets/mail/PHPMailer.php';
require '/wp-content/themes/test/assets/mail/Exception.php';

$mail = new PHPMailer(true);
$mail->CharSet = 'UTF-8';
$mail->SetLanguage('ru', 'phpmailer/language/');
$mail->IsHtml(true);

// от кого письмо
$mail->setFrom('info@test-site.test.kz', 'Вакансии test');
// Кому
$mail->addAddress('test@test.kz');
// тело письма
$mail->Subject = 'Заявка на вакансию';

$body = '<h1>Заявка на вакансию</h1>';

if(trin(!empty($_POST['name']))){
    $body.='<p><strong>Имя:</strong>'.$_POST['name'].'</p>';
}

if(trin(!empty($_POST['surname']))){
    $body.='<p><strong>Фамилия:</strong>'.$_POST['surname'].'</p>';
}

if(trin(!empty($_POST['email']))){
    $body.='<p><strong>Почта:</strong>'.$_POST['email'].'</p>';
}

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

if(trin(!empty($_POST['comment']))){
    $body.='<p><strong>Комментарий:</strong>'.$_POST['comment'].'</p>';
}

// Прикрепить файл
if(!empty($_FILES['file']['tmp_name'])) {
    // путь загрузки
    $filePath = __DIR__ . "/wp-content/themes/test/assets/files/" . $_FILES['image']['name'];
    // загрузка файла
    if (copy($_FILES['file']['tmp_name'], $filePath)) {
        $fileAttach = $filePath;
        $body.='<p>Резюме</p>';
        $mail->addAttachment($fileAttach);
    }
}

$mail->Body = $body;

// отправляем
if (!$mail->send()) {
    $message = 'Ошибка';
} else {
    $message = 'Данные отправлены';
}

$response = ['message' => $message];

header('Content-type: application/json');
echo json_encode($response);


Я не правильно задаю путь к mail.php?
let response = await fetch('/wp-content/themes/test/mail.php', {
                    method: 'POST';
                    body: formData
                });


Я просто пробовал еще и другие варианты кода, они тоже не работают. Если делаю через js то перебрасывает на страницу 404, а если убрать js и сделать action="" на mail.php то выдает 500 ошибку.
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Чтобы продать что-нибудь полезное решить проблему, надо сначала понимать в чем она состоит, а у вас ошибки выключены... Смотрите логи, или включите вывод ошибок.
Ответ написан
Ваш ответ на вопрос

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

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