@alena1029

Как подключить добавление нескольких файлов PHPMailer?

Помогите пожалуйста!
Создаю форму отправки на почту и никак не могу добавить условие чтобы можно было прикреплять несколько файлов разного типа. Получается добавить несколько файлов в интерфейсе, но на почту приходит только 1 файл.
Я также не понимаю, что надо добавить в саму папку phpmailer, вроде надо добавить autoload.php, но я не понимаю как его добавлять
Только пожалуйста не отправляйте в документацию PHPMailer, я пыталась там понять

<form method="post" action="#" id="form" class="form__body" enctype="multipart/form-data">
..............
<div class="form__item">
                    <div class="form__label">Прикрепить файл</div>
                    <div class="file">
                       
                        <input type="hidden" name="MAX_FILE_SIZE" value="100000">
                        <input class="file__input" id="formFile" name="file[]" type="file" multiple="multiple">
                        
                        <div id="formPreview" class="file__preview"></div>
                    </div>
                </div>


<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

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

require 'phpmailer/src/SMTP.php';


$message = '';
if (array_key_exists('file', $_FILES)) {
$mail = new PHPMailer(true);
$mail ->Charset = 'UTF-8';
$mail ->setLanguage('ru', 'phpmailer/language/');
$mail ->IsHTML(true);

// от кого письмо 
$mail->setFrom('info@fls.guru', '');
// кому идет письмо 
$mail->addAddress('cchgchh@yandex.ru');
// тема письмо 
$mail->Subject = 'Новая заявка Cybernext.one';



// тело письмо 
$body = '<h1>Заявка: </h1>';

if(!empty($_POST['name'])){
    $body .='<p><strong>Имя: </strong>'.$_POST['name'].'</p>';
}
if(!empty($_POST['surname'])){
    $body .='<p><strong>Фамилия: </strong>'.$_POST['surname'].'</p>';
}
if(!empty($_POST['email'])){
    $body .='<p><strong>E-mail: </strong>'.$_POST['email'].'</p>';
}
if(!empty($_POST['date'])){
    $body .='<p><strong>Дедлайн: </strong>'.$_POST['date'].'</p>';
}
if(!empty($_POST['options'])){
    $body .= '<p><strong>Кто вы?: </strong></p>';
    foreach($_POST['options'] as $option){
        $body .= '<p>'.$option.'</p>';
    }
}
if(!empty($_POST['message'])){
    $body .='<p><strong>Иное: </strong>'.$_POST['message'].'</p>';
} 

// Attach multiple files one by one
for ($ct = 0, $ctMax = count($_FILES['file']['tmp_name']); $ct < $ctMax; $ct++) {
    // Извлечение расширения из предоставленного  filename
    $ext = PHPMailer::mb_pathinfo($_FILES['file']['name'][$ct], PATHINFO_EXTENSION);
    // Определение безопасного местоположения для перемещения загруженного файла с сохранением расширения.
    $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['file']['name'][$ct])) . '.' . $ext;
    $filename = $_FILES['file']['name'][$ct];
    if (move_uploaded_file($_FILES['file']['tmp_name'][$ct], $uploadfile)) {
        if (!$mail->addAttachment($uploadfile, $filename)) {
            $msg .= 'Failed to attach file ' . $filename;
        }
    } else {
        $msg .= 'Failed to move file to ' . $uploadfile;
    }
}


$mail->Body = $body;


try {
    $mail->send();
    $message = 'данные отправлены';
} catch (Exception $e) {
    $message = 'ошибка: ' . $mail->ErrorInfo;
}

$response = ['message'=> $message];
header('Content-type: application/json');
echo json_encode($response);


}

?>


"use strict"

document.addEventListener('DOMContentLoaded', function () {
    const form = document.getElementById('form');
    form.addEventListener('submit', formSend);

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

        let error = formValidate(form);


        let formData = new FormData(form);
        for (let i = 0; i < formFile.files.length; i++) {
            formData.append('files[]', formFile.files[i]);
        }


        if (error === 0) {
            form.classList.add('_sending');
            let response = await fetch('sendmail.php', {
                method: 'POST',
                body: formData
            });
            if (response.ok) {
                let result = await response.json();
                alert(result.message);
                formPreview.innerHTML = '';
                form.reset();
                form.classList.remove('_sending');
            } else {
                alert('Ошибка');
                form.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 !/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{1,5}|[0-9]{1,3})(\]?)$/.test(input.value);
    }

    const formFile = document.getElementById('formFile');
    const formPreview = document.getElementById('formPreview');

    
    if (formFile && formPreview) {
        formFile.addEventListener('change', () => {
            uploadFiles(formFile.files);
        });
    } else {
        console.error('Элементы с id "formFile" или "formPreview" не найдены в DOM.');
    }

    function uploadFiles(files) {
        const formData = new FormData(form); // Создаем объект FormData здесь
        for (let i = 0; i < files.length; i++) {
            const file = files[i];
            var reader = new FileReader();
            reader.onload = function (e) {
                const fileInfo = document.createElement('div');
                fileInfo.classList.add('file__info');

                const fileName = document.createElement('p');
                fileName.textContent = `Файл ${file.name} загружен`;

                const deleteButton = document.createElement('button');
                deleteButton.textContent = 'Удалить';
                deleteButton.classList.add('file__delete');
                deleteButton.addEventListener('click', () => {
                    fileInfo.remove();
                    formData.delete('files[]', file);
                });

                fileInfo.appendChild(fileName);
                fileInfo.appendChild(deleteButton);

                formPreview.appendChild(fileInfo);
            };
            reader.onerror = function (e) {
                alert('ошибка при загрузке файла');
            };
            reader.readAsDataURL(file);
        }

    }
});
  • Вопрос задан
  • 21 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы