Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中将多个文件从表单附加到邮件?_Php_Email_Attachment - Fatal编程技术网

如何在php中将多个文件从表单附加到邮件?

如何在php中将多个文件从表单附加到邮件?,php,email,attachment,Php,Email,Attachment,我尝试最多附加两个文件,通过邮件发送,但这些文件是以二进制代码的形式通过邮件发送的,因此当我打开收到的邮件时,我发现这些文件是二进制的,以下是我的代码: $files = array(); if(is_uploaded_file($_FILES['cv']['tmp_name'])) array_push($files, $_FILES['cv']); if(is_uploaded_file($_FILES['portfolio'][

我尝试最多附加两个文件,通过邮件发送,但这些文件是以二进制代码的形式通过邮件发送的,因此当我打开收到的邮件时,我发现这些文件是二进制的,以下是我的代码:

$files = array();

if(is_uploaded_file($_FILES['cv']['tmp_name']))

                array_push($files, $_FILES['cv']);

            if(is_uploaded_file($_FILES['portfolio']['tmp_name']))

                array_push($files, $_FILES['portfolio']);

            $subject = "Contact Mail";
                    $headers = 'From: '.$email_fromto."\r\n".
                    "subject: {$subject}";

            $randomVal = md5(time()); 
            $mimeBoundary = "==Multipart_Boundary_x{$randomVal}x"; 
            $headers .= "\nMIME-Version: 1.0\n"; 
            $headers .= "Content-Type: multipart/mixed;\n" ;
            $headers .= " boundary=\"{$mimeBoundary}\"";

            $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" . 
            "From: $sex $fname $lname.\r\n".
                "Message: {$message}";
                $email_fromto = "mail@mail.com";

            foreach($files as $userfile){

                $tmpName = $userfile['tmp_name']; 
                $fileType = $userfile['type']; 
                $fileName = $userfile['name'];

                if(file($tmpName)){ 
                    $file = fopen($tmpName,'rb');
                    $data = fread($file,filesize($tmpName)); 
                    fclose($file); 

                    $data = chunk_split(base64_encode($data)); 
                    $message .= "--{$mimeBoundary}\n" . 
                    "Content-Type: {$fileType};\n" . 
                    " name=\"{$fileName}\"\n" . 
                    "Content-Transfer-Encoding: base64\n\n" . 
                    $data . "\n\n" . 
                    "--{$mimeBoundary}--\n";
                }
            }
那么我所做的错误在哪里呢?

像这样使用

     // generate a random string to be used as the boundary marker
   $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";

   // now we'll build the message headers
   $headers = "From: $from\r\n" .
   "MIME-Version: 1.0\r\n" .
      "Content-Type: multipart/mixed;\r\n" .
      " boundary=\"{$mime_boundary}\"";

   // here, we'll start the message body.
   // this is the text that will be displayed
   // in the e-mail

   $message="This is an example"



foreach($_FILES as $userfile){
      // store the file information to variables for easier access
      $tmp_name = $userfile['tmp_name'];
      $type = $userfile['type'];
      $name = $userfile['name'];
      $size = $userfile['size'];

      // if the upload succeded, the file will exist
      if (file_exists($tmp_name)){

         // check to make sure that it is an uploaded file and not a system file
         if(is_uploaded_file($tmp_name)){

            // open the file for a binary read
            $file = fopen($tmp_name,'rb');

            // read the file content into a variable
            $data = fread($file,filesize($tmp_name));

            // close the file
            fclose($file);

            // now we encode it and split it into acceptable length lines
            $data = chunk_split(base64_encode($data));
         }
      }
         // now we'll insert a boundary to indicate we're starting the attachment
         // we have to specify the content type, file name, and disposition as
         // an attachment, then add the file content.
         // NOTE: we don't set another boundary to indicate that the end of the 
         // file has been reached here. we only want one boundary between each file
         // we'll add the final one after the loop finishes.


         $message .= "--{$mime_boundary}\n" .
            "Content-Type: {$type};\n" .
            " name=\"{$name}\"\n" .
            "Content-Disposition: attachment;\n" .
            " filename=\"{$fileatt_name}\"\n" .
            "Content-Transfer-Encoding: base64\n\n" .
         $data . "\n\n";
      }
// here's our closing mime boundary that indicates the last of the message

   $message.="--{$mime_boundary}--\n";

   // now we just send the message
   if (@mail($to, $subject, $message, $headers))

      echo "Mail was Send Sucessfully";
   else
      echo "Failed to send";