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



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

$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."rn".
                    "subject: {$subject}";
            $randomVal = md5(time()); 
            $mimeBoundary = "==Multipart_Boundary_x{$randomVal}x"; 
            $headers .= "nMIME-Version: 1.0n"; 
            $headers .= "Content-Type: multipart/mixed;n" ;
            $headers .= " boundary="{$mimeBoundary}"";
            $message = "This is a multi-part message in MIME format.nn" . 
            "--{$mimeBoundary}n" . 
            "Content-Type: text/plain; charset="iso-8859-1"n" . 
            "Content-Transfer-Encoding: 7bitnn" . 
            "From: $sex $fname $lname.rn".
                "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: base64nn" . 
                    $data . "nn" . 
                    "--{$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: $fromrn" .
   "MIME-Version: 1.0rn" .
      "Content-Type: multipart/mixed;rn" .
      " 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: base64nn" .
         $data . "nn";
      }
// 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";

相关内容

  • 没有找到相关文章

最新更新