2015-01-07 2 views
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 или чем-то еще? Я отчаянно нуждаюсь в помощи!

+0

Возможный дубликат [Форма электронной почты отправляет несколько писем в зависимости от вложений] (http://stackoverflow.com/questions/27796596/email-form-sends-multiple-mails-depending-on-attachments) – donald123

ответ

0

Вытащите код под:

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^