Форма отправляет каждый файл в другой адрес электронной почты, а не все вместе

0

Я пытаюсь сделать форму, чтобы люди могли загружать несколько фотографий на один адрес электронной почты, идея в том, что когда я выбираю 3, 4 или 5 фото, которые отправляются в 1 электронном письме. Но если я выберу 3 фотографии, я получаю 3 письма с 1 вложением на электронную почту, я понятия не имею, почему и я застрял в этой проблеме уже несколько часов!

Взгляните на мой HTML-код

<form id="upload" method="post" action="upload.php" enctype="multipart/form-data">
    <div id="drop">
            Add images
            <input type="file" name="photo[]" multiple accept="image/*;capture=camera">

            <input type="submit" name="Submit" value="Send">
    </div>

    <ul>
        <!-- The file uploads will be shown here -->
    </ul>

</form>

И вот мой PHP-код

<?php
$to = "[email protected]";
$from = "test";
$name = "test";
$subject = "test";
$message = "test";

$message = wordwrap($message,70);

foreach ($_FILES['photo']['name'] as $key => $tmp_name) {

   $allowedExts = array("gif", "jpeg", "jpg", "png");
   $temp = explode(".", $_FILES["photo"]["name"][$key]);
   $extension = end($temp);

   if ((($_FILES["photo"]["type"][$key] == "image/gif")
    || ($_FILES["photo"]["type"][$key] == "image/jpeg")
    || ($_FILES["photo"]["type"][$key] == "image/jpg")
    || ($_FILES["photo"]["type"][$key] == "image/pjpeg")
    || ($_FILES["photo"]["type"][$key] == "image/x-png")
    || ($_FILES["photo"]["type"][$key] == "image/png"))
    && in_array($extension, $allowedExts)) {

      /* GET File Variables */ 
      $tmpName = $_FILES['photo']['tmp_name'][$key]; 
      $fileType = $_FILES['photo']['type'][$key]; 
      $fileName = $_FILES['photo']['name'][$key]; 

      /* Start of headers */ 
      $headers = "From: $from"; 

      if (file($tmpName)) { 
        /* Reading file ('rb' = read binary)  */
        $file = fopen($tmpName,'rb'); 
        $data = fread($file,filesize($tmpName)); 
        fclose($file); 

        /* a boundary string */
        $randomVal = md5(time()); 
        $mimeBoundary = "==Multipart_Boundary_x{$randomVal}x"; 

        /* Header for File Attachment */
        $headers .= "\nMIME-Version: 1.0\n"; 
        $headers .= "Content-Type: multipart/mixed;\n" ;
        $headers .= " boundary=\"{$mimeBoundary}\""; 

        /* Multipart Boundary above message */
        $message .= "This is a multi-part message in MIME format.\n\n" . 
                   "--{$mimeBoundary}\n" . 
                   "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
                   "Content-Transfer-Encoding: 7bit\n\n" . 
                   $message . "\n\n"; 

        /* Encoding file data */
        $data = chunk_split(base64_encode($data)); 

        /* Adding attchment-file to message*/
        $message .= "--{$mimeBoundary}\n" . 
                  "Content-Type: {$fileType};\n" . 
                  " name=\"{$fileName}\"\n" . 
                  "Content-Transfer-Encoding: base64\n\n" . 
                  $data . "\n\n" . 
                  "--{$mimeBoundary}--\n"; 
      }
   }
}

$sent = mail($to, $subject, $message, $headers);

if ($sent) {
  echo "Het bericht is met succes verstuurd!";
} else {
    echo "Er is een probleem opgetreden, probeer het later nog eens.";
}

?>

Мне нужна помощь, я пробовал много разных решений, но я просто не могу заставить ее работать, может быть, это проблема с Gmail или чем-то еще? Я отчаянно нуждаюсь в помощи!

Теги:
forms
email
photo

1 ответ

0

Вытяните код под:

/* Start of headers */ 
/* a boundary string */
/* Header for File Attachment */
/* Multipart Boundary above message */

Из цикла foreach - сделайте этот код только один раз. Не один раз в файл. Кроме того, 3 линии непосредственно под фоном должны находиться за пределами foreach.

Вместо использования fread() используйте file_get_contents().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню