Php 表单以不同的电子邮件发送每个文件,而不是全部发送在一起

Php 表单以不同的电子邮件发送每个文件,而不是全部发送在一起,php,forms,email,photo,Php,Forms,Email,Photo,我正在尝试制作一个表单,以便人们可以将多张照片上传到一封电子邮件中,其想法是,当我选择3张、4张或5张照片时,照片将在一封电子邮件中发送。但如果我选择3张照片,我会收到3封电子邮件,每封邮件有1个附件,我不知道为什么,我已经在这个问题上纠缠了好几个小时了 看看我的HTML代码 <form id="upload" method="post" action="upload.php" enctype="multipart/form-data"> <div id="drop"&

我正在尝试制作一个表单,以便人们可以将多张照片上传到一封电子邮件中,其想法是,当我选择3张、4张或5张照片时,照片将在一封电子邮件中发送。但如果我选择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@email.com";
$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或其他什么问题?我急需帮助

将代码拉到以下位置:

/* Start of headers */ 
/* a boundary string */
/* Header for File Attachment */
/* Multipart Boundary above message */
跳出foreach循环-只需编写一次代码。不是每个文件一次。此外,foreach正下方的3条线应位于foreach外部

不要使用fread,而是使用文件获取内容。

文件的可能副本