Не отправляется файл через почту

243
22 июня 2017, 06:11

Все данные отправляются кроме файла

<input class="igroup-input" type="file" name="fileFF[]" multiple id="fileFF" accept="image/*">    

<?php
            if (isset ($_POST['nameFF'])) {
                $to = "1@gmail.com";
                $from = $_POST['nameFF'];
                $subject = "Запрос на подачу рекламы с ".$_SERVER['HTTP_REFERER'];
                $message = "Регион: ".$_POST['nameF']."\nГород: ".$_POST['nameFF']."\nНазвание компании: ".$_POST['nameComp']."\nКатегория: ".$_POST['nameFF1']."\nНомер телефона: ".$_POST['telFF']."\nСсылка ВК: ".$_POST['vk']."\nИмя менеджера: ".$_POST['nameMen']."\nДата и время: ".$_POST['loginFF']."\nIP: ".$_SERVER['REMOTE_ADDR'];
                  $boundary = md5(date('r', time()));
      $filesize = '';
      $headers = "MIME-Version: 1.0\r\n";
      $headers .= "From: " . $from . "\r\n";
      $headers .= "Reply-To: " . $from . "\r\n";
      $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
      $message="
    Content-Type: multipart/mixed; boundary=\"$boundary\"
    --$boundary
    Content-Type: text/plain; charset=\"utf-8\"
    Content-Transfer-Encoding: 7bit
    $message";
      for($i=0;$i<count($_FILES['fileFF']['name']);$i++) {
          if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {
             $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));
             $filename = $_FILES['fileFF']['name'][$i];
             $filetype = $_FILES['fileFF']['type'][$i];
             $filesize += $_FILES['fileFF']['size'][$i];
             $message.="
    --$boundary
    Content-Type: \"$filetype\"; name=\"$filename\"
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment; filename=\"$filename\"
    $attachment";
         }
       }
       $message.="
    --$boundary--";
      if ($filesize < 10000000) {
        mail($to, $subject, $message, $headers);
        $output = '<script>alert("Ваше сообщение получено, спасибо!");</script>';
      } else {
        $output = '<script>alert("Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.");</script>';
      }
    }
    ?>
$(".fofm1").submit(function() {
    var str = $(this).serialize();
    $.ajax({
        type: "POST",
        url: "contact.php",
        data: str,
        success: function(msg) {
            if(msg == 'ok') {
                $('.popup2, .overlay').css('opacity','1');
                $('.popup2, .overlay').css('visibility','visible');
                $('.popup').css({'opacity':'0','visibility':'hidden'});
            }
            else {
                $('.popup2 .window').html('<h5>Ошибка</h5><p>Сообщение не отправлено, убедитесь в правильности заполнение полей</p>');
                $('.popup2, .overlay').css('opacity','1');
                $('.popup2, .overlay').css('visibility','visible');
                $('.popup').css({'opacity':'0','visibility':'hidden'});
            }
        }
    });
    return false;
});
Answer 1

Проблема заключается в том, что метод .serialize() не умеет корректно обрабатывать файлы. Об этом явно сказано в документации, а именно:

Note: Only "successful controls" are serialized to the string. No submit button value is serialized since the form was not submitted using a button. For a form element's value to be included in the serialized string, the element must have a name attribute. Values from checkboxes and radio buttons (inputs of type "radio" or "checkbox") are included only if they are checked. Data from file select elements is not serialized.

Посмотрите на примеры вот отсюда. Там подробно разобран как раз ваш случай с отправкой файла.

Для лучшего понимания, как именно происходит загрузка файлов через AJAX, рекомендую посмотреть также вот эту страничку. Там примеры даны на обычно JS, но зато подробно описано - что и почему.

READ ALSO
WP_Query поиск по meta_key

WP_Query поиск по meta_key

У меня есть мета поле со значениями типо a1, a2, a11 и тд

161
Не открывается сайт в Iframe, содержимое ошибки внутри

Не открывается сайт в Iframe, содержимое ошибки внутри

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

294
Вывести слайдер owl carousel из custom field Wordpress без плагина

Вывести слайдер owl carousel из custom field Wordpress без плагина

Нужно вывести слайдер из поля the_sub_field('owl_carousel') без плагина, средствами Wordpress

309
Получить периоды из таблицы

Получить периоды из таблицы

Есть таблица (много строк)

147