表单将每个文件发送到不同的电子邮件中,而不是一起发送


Form sends each file in different email instead of all together

我正在尝试制作一个表单,以便人们可以将多张照片上传到一封电子邮件中,这个想法是当我选择 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@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 循环之外 - 只执行一次该代码。每个文件不一次。此外,正下方的 3 条线应该在 foreach 之外。

而不是使用fread()使用file_get_contents().