@Alexfixer

Почему не приходят вложения в письме на почту с помощью phpmailer?

Пробовал на разные почты письма отправлять, вложений нет...
В интернете не нашёл как исправить, подскажите плз.
код:
HTML:
<form action="#" class="form" method="POST" enctype="multipart/form-data">
    <label class="form__label">
    <input class="input form__input input-name" type="text" data-validate-field="name"
    name="Имя" placeholder="Введите имя">
    </label>
     <label class="form__label">
    <input class="input form__input input-mail" type="email" data-validate-field="email"
    name="Email" placeholder="Введите email">
    </label>
    <label class="form__label">
    <input class="input form__input input-tel" type="tel" data-validate-field="tel" name="Телефон" placeholder="Введите 
    телефон">
</label>
    <label class="form__label">
    <textarea class="textarea form__input" name="Сообщение" id="" cols="30" rows="10"
    placeholder="Введите ваше сообщение.."></textarea>
    </label>
    <input class="input" type="file" name="file[]" multiple id="myfile">
    <button class="button form__button">Отправить</button>
</form>


PHP:
<?php
// Файлы phpmailer
require 'phpmailer/PHPMailer.php';
require 'phpmailer/SMTP.php';
require 'phpmailer/Exception.php';

$title = "Тема письма";
$file = $_FILES['file'];

$c = true;
// Формирование самого письма
$title = "?????????????????????????????????????????????";
foreach ( $_POST as $key => $value ) {
  if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
    $body .= "
    " . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
      <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
      <td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
    </tr>
    ";
  }
}

$body = "<table style='width: 100%;'>$body</table>";

// Настройки PHPMailer
$mail = new PHPMailer\PHPMailer\PHPMailer();

try {
  $mail->isSMTP();
  $mail->CharSet = "UTF-8";
  $mail->SMTPAuth   = true;

  // Настройки вашей почты
  $mail->Host       = 'smtp.mail.ru'; // SMTP сервера вашей почты
  $mail->Username   = '???????????????'; // Логин на почте
  $mail->Password   = '???????????????'; // Пароль на почте
  $mail->SMTPSecure = 'ssl';
  $mail->Port       = 465;

  $mail->setFrom('???????????????', 'Заявка с вашего сайта'); // Адрес самой почты и имя отправителя

  // Получатель письма
  $mail->addAddress('???????????????@yandex.ru');
  $mail->addAddress('???????????????@gmail.com');

  // Прикрипление файлов к письму
  if (!empty($file['name'][0])) {
    for ($ct = 0; $ct < count($file['tmp_name']); $ct++) {
      $uploadfile = tempnam(sys_get_temp_dir(), sha1($file['name'][$ct]));
      $filename = $file['name'][$ct];
      if (move_uploaded_file($file['tmp_name'][$ct], $uploadfile)) {
          $mail->addAttachment($uploadfile, $filename);
          $rfile[] = "Файл $filename прикреплён";
      } else {
          $rfile[] = "Не удалось прикрепить файл $filename";
      }
    }
  }

  // Отправка сообщения
  $mail->isHTML(true);
  $mail->Subject = $title;
  $mail->Body = $body;

  $mail->send();

} catch (Exception $e) {
  $status = "Сообщение не было отправлено. Причина ошибки: {$mail->ErrorInfo}";
}

JS:


console.log('Init!');

// inputmask
const form = document.querySelector('.form');
const telSelector = form.querySelector('input[type="tel"]');
const inputMask = new Inputmask('+7 (999) 999-99-99');
inputMask.mask(telSelector);

const validation = new JustValidate('.form');

validation
    .addField('.input-name', [
        {
            rule: 'minLength',
            value: 3,
            errorMessage: 'Введите 3 и более символов'
        },
        {
            rule: 'maxLength',
            value: 30,
        },
        {
            rule: 'required',
            value: true,
            errorMessage: 'Введите имя!'
        }
    ])
    .addField('.input-mail', [
        {
            rule: 'required',
            value: true,
            errorMessage: 'Email обязателен',
        },
        {
            rule: 'email',
            value: true,
            errorMessage: 'Введите корректный Email',
        },
    ])
    .addField('.input-tel', [
        {
            rule: 'required',
            value: true,
            errorMessage: 'Телефон обязателен',
        },
        {
            rule: 'function',
            validator: function () {
                const phone = telSelector.inputmask.unmaskedvalue();
                return phone.length === 10;
            },
            errorMessage: 'Введите корректный телефон',
        },
    ]).onSuccess((event) => {
        console.log('Validation passes and form submitted', event);

        let formData = new FormData(event.target);

        console.log(...formData);

        let xhr = new XMLHttpRequest();

        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    console.log('Отправлено');

                    let formOrder = document.querySelector('.input-name');
                    const successMessage = document.createElement('span');

                    successMessage.className = "message-success";
                    successMessage.innerHTML = "Спасибо, ваш заказ скоро будет обработан!";
                    formOrder.after(successMessage);
                }
            }
        }

        xhr.open('POST', 'mail.php', true);
        xhr.send(formData);

        event.target.reset();
    });


upd: поправил '???????????????'; // Пароль на почте
просто тут опечатка, не из-за этого...
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽