PHPMailer AddAttachment - PullRequest
       11

PHPMailer AddAttachment

0 голосов
/ 10 октября 2019

Я отправляю данные из формы, используя PHPMailer, все правильно подключено и хорошо работает для всех моих полей ввода. За исключением того, что у меня возникают проблемы при отправке файла загрузки в виде вложения.

Мой php для addattachment ниже

if(is_array($_FILES)) {
  $mail->AddAttachment($_FILES['image']['tmp_name'],$_FILES['image']['name']); 
}

Вот HTML-код для входного файла, чтобы вы могли видеть егоbasic

<input type="file" id="image" name="image" class="" />

Форма отправляется, но в error_log она показывает

PHP Notice:  Undefined index: image in /dir_location/mailer.php

Да, просто чтобы исключить, я использую <form id="form" method="POST" enctype="multipart/form-data">

У меня также естьпробовал

if (array_key_exists('image', $_FILES)) {
      $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['image']['name']));

      if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) {
        $mail->addAttachment($uploadfile, 'UPLOAD file');
      }
}

Но это тоже не сработало. Та же проблема.

Буду признателен за любые советы других, спасибо.

1 Ответ

1 голос
/ 10 октября 2019

В ходе дальнейших исследований я нашел решение, если у кого-то возникли проблемы с PHPMailer и Ajax, отправляющими файл-вложение.

Используйте документы PHP, поставляемые с PHPMailer для загрузки файла , это работало сокончательные поправки Ajax.

if (array_key_exists('userfile', $_FILES)) {

    $uploadfile = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name']));

    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
       // Attach the uploaded file
        $mail->addAttachment($uploadfile, $_FILES['userfile']['name']);
    //Send the message, check for errors
        if (!$mail->send()) {
            $msg = 'Sorry, something went wrong. Please try again later.';
        } else {
            $msg = 'Message sent! Thanks for contacting us.';
        }
    } else {
    }
}

Ajax для отправки формы, мне нужно было изменить formData и добавить в dataType.

$(function() {
  var form = $('#paymentForm');

    $(form).submit(function() {
      var formData = new FormData(this);

        $.ajax({
            type: 'POST',
            url: 'mailer.php',
            data: formData,
            dataType : "json",
            contentType: false,
            cache: false,
            processData: false
        })
    });

});
...