2011-12-05 44 views
0

我使用下面的代碼發送php郵件時出現問題。 MIME heades在信息中繼續顯示,附件在信息主體中顯示爲塗鴉文本而不是附件。可能是什麼問題郵件正文中出現MIME標頭

 <?php 
     session_start(); 
     require_once("includes/functions.php"); 
     require_once("includes/dbconnect.php"); 
     require_once("Mail/mailfunctions.php"); 



     //function_to_be_applied($finaldest_email, $message, $subject, $fromname, $fromemail, $replyto) 
     function function_to_be_applied($finaldest_email, $key){ 
       //require_once "Mail.php" ; 
       global $fromemail; 
       global $message; 
       global $fromname; 
       global $subject; 
       global $replyto; 
       global $seconds; 
       global $reprt; 
       global $headers; 

       $to = $finaldest_email; 
       $from = "".$fromname." <$fromemail>"; 
       $subject = $subject; 

       if(mail($to, $subject, $message, $headers)) { 
              sleep($seconds); 
       $reprt .= "Message successfully sent to: ". $to."<br />"; 
            } else { 
       $reprt .= "Message not successfully sent to: ". $to."<br />"; 
            } 

       } 

     if(isset($_POST['submit'])) 
      { 
      $errors_val = array(); 
      $required_fields = array("subject", "fromemail", "message", "dest_email"); 
      foreach($required_fields as $fieldname) 
      { 
       if(!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) &&(!is_int($_POST[$fieldname])))) 
         { 
         if($fieldname == "subject") 
          {$errors_val[0] = "-Sending email without SUBJECT is not allowed";} 
         if($fieldname == "fromemail") 
          {$errors_val[1] = "-Sending email without a FROM EMAIL is not allowed";} 
         if($fieldname == "message") 
          {$errors_val[2] = "-Sending an empty message is not allow";} 
         if($fieldname == "dest_email") 
          {$errors_val[3] = "-There must be at least one email in the destination email address";} 

         } 
      } 
      if(empty($errors_val)){ 
      $errors = array(); 
      if(false == validate_email(trim($_POST['fromemail']))){ 
       $errors[0] = "FROM EMAIL is invalid"; 
      } 
      if(false == validate_email(trim($_POST['replyto']))){ 
       $errors[1] = "REPLY TO EMAIL is invalid";} 
      if(!is_numeric(trim($_POST['seconds']))){ 
       $errors[2] = "Seconds between messages must be a number";} 

      $allowtypes = array("doc", "pdf", "txt", "zip", "gif", "jpeg", "jpg"); //the type of file can be attached 
      $max_file_size="100"; //describes the size that cab be attached 

      // checks that we have a file 
      if((!empty($_FILES["attachment"])) && ($_FILES["attachment"]["error"] == 0)) { 
       //set a variable $attached = 1 
        $attached = 1; 

        // basename -- Returns filename component of path 
        $filename = basename($_FILES['attachment']['name']); 
        $ext = substr($filename, strrpos($filename, '.') + 1); 
        $filesize=$_FILES['attachment']['size']; 
        $max_bytes=$max_file_size*1024; 

        //Check if the file type uploaded is a valid file type. 
        if (!in_array($ext, $allowtypes)) { 
         $errors[3]="Invalid extension for your file: <strong>".$filename."</strong>"; 
         unset($attached); 
       // check the size of each file 
       } elseif($filesize > $max_bytes) { 
         $errors[4]= "Your file: <strong>".$filename."</strong> is to big. Max file size is ".$max_file_size."kb."; 
        unset($attached); 
         } 

      } 

     if(empty($errors)){ 
        //generate a unique boundary 
        $semi_rand = md5(time()); 
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

        if(isset($_POST['seconds']) && ($_POST['seconds'] != "")) 
        {$seconds = $_POST['seconds'];}else{$seconds = 0.5;} 
        $subject = trim($_POST['subject']); 
        $fromname = trim($_POST['fromname']); 
        $fromemail = trim($_POST['fromemail']); 
        $from = stripslashes($fromname)."<".stripslashes($fromemail).">"; 
        $emailmessage = trim($_POST['message']); 
        $replyto = trim($_POST['replyto']); 
        $dest_email = trim($_POST['dest_email']); 
        $emailarray = explode("\r\n", $dest_email, 400); 
        $finaldest_email = array_unique($emailarray); 

        $headers = "From: " . $from . "\r\n"; 
        $headers .= "Reply-To:" . $replyto . "\r\n"; 
        $headers .= "Mime-Version: 1.0\r\n"; 
        $headers .= " Content-Type: multipart/mixed;\r\n" . 
           " boundary=\"{$mime_boundary}\""; 


        //attachment 
       if(isset($attached)){ 
        $fileatt  = $_FILES["attachment"]["tmp_name"]; 
        $fileatt_type = $_FILES["attachment"]["type"]; 
        $fileatt_name = $_FILES["attachment"]["name"]; 
       if (is_uploaded_file($fileatt)) { 
        // Read the file to be attached ('rb' = read binary) 
        $data = file_get_contents($fileatt); 

        //$file = fopen($fileatt,'rb'); 
        //$data = fread($file,filesize($fileatt)); 
        //fclose($file); 

        // Base64 encode the file data 
        $finaldata = chunk_split(base64_encode($data)); 
        } 
        $message = "--{$mime_boundary}\r\n"; 
        $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n"; 
        $message .= "Content-Transfer-Encoding: 7bit\r\n"; 
        $message .= "{$emailmessage}\r\n"; 
        $message .= "--{$mime_boundary}\r\n"; 
        $message .= "Content-Type: {$fileatt_type}; name=\"{$fileatt_name}\"\n\n". 
           "Content-Transfer-Encoding: base64\n\n"; 
        $message .= "Content-Disposition: attachment; filename=\"{$fileatt_name}\"\n\n"; 

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

       }elseif(!isset($attached)){ 

        $message = "--{$mime_boundary}\r\n"; 
        $message .= "Content-Type: text/plain; charset=\"iso-8859-1\" \r\n"; 
        $message .= "Content-Transfer-Encoding: 7bit\r\n"; 
        $message .= "{$emailmessage}\r\n"; 
        $message .= "--{$mime_boundary}--\r\n"; 

        } 
       $reprt = "Preparing to send message..<br />"; 

      if(true == array_walk($finaldest_email, 'function_to_be_applied')){ 
      $numberofemailsent = count($finaldest_email); 

      }else{echo "No email sent";} 

       }else{$string = implode("<br /> -" , $errors); $error_message = $string; } 



      }else{$string = implode("<br /> -" , $errors_val); $error_message = $string; } 



     } 

      ?> 

回答

2

不要生成您自己的mime電子郵件。使用PHPMailerSwiftmailer並將該腳本的一大塊減少到可能的10行代碼。

同樣,不要通過查看文件名來驗證文件類型。僞造文件名和客戶端指定的MIME類型是微不足道的。請始終使用服務器端MIME驗證。

+0

我找到了原因。標題沒有正確製作 –

相關問題