2010-09-30 76 views
0

我需要一些帮助,在这里有一个非常奇怪的情况..我做了一个webmail表单发送多个附件的电子邮件,它昨天开箱即用,但今天它只发送1个文件作为附件和不是多个。 O_Ophp邮件附件奇怪的行为

我恢复我的SVN到一个较旧的版本也问题仍然存在,任何想法?这真的很奇怪..如何工作的东西刹车从一天到另一天,我认为这个问题一定是SMTP服务器或什么的。请帮助!

代码:

 $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 


      $attachments = TRUE; 
     $body = "This is a multi-part message in MIME format.\n\n" . 
     "--{$mime_boundary}\n" . 
     "Content-Type: text/plain; charset=iso-8859-1\n" . 
     "Content-Transfer-Encoding: 7bit\n\n" . 
     $body . "\n\n"; 
     $body .= "--{$mime_boundary}\n"; 
     $attach = array(); 
     for($i=0; $i<count($_FILES['file']['name']);$i++) 
     { 
      $tmp_name = $_FILES['file']['tmp_name'][$i]; 
      $type = $_FILES['file']['type'][$i]; 
      $name = $_FILES['file']['name'][$i]; 
      $size = $_FILES['file']['size'][$i]; 

      if (file_exists($tmp_name)){ 
       $kb = $size/1024; 
       $kbSize = round($kb*100)/100; 

       if(is_uploaded_file($tmp_name)){ 
        $file = fopen($tmp_name,'rb'); 
        $fdata = fread($file,filesize($tmp_name)); //stream file to var and send it in headers 
        fclose($file); 
        $fdata = chunk_split(base64_encode($fdata)); 
        $body .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$name\"\n" . 
         "Content-Disposition: attachment;\n" . " filename=\"$name\"\n" . 
         "Content-Transfer-Encoding: base64\n\n" . $fdata . "\n\n"; 
        $body .= "--{$mime_boundary}-\n"; 
       } 
      }  
     } 
     $sent = myMailer::sendAttached($from,$to,$subject,$body,$mime_boundary,$multi); 

MyMailer类,sendAttached方法:

public static function sendAttached($from,$to,$subject,$body,$mime,$multi=FALSE) 
{ 

    $headers = 'From: Website <'.$from.'>'. "\r\n". 
    'Reply-To: '.$from. "\r\n". 
    "MIME-Version: 1.0\r\n" . 
    "Content-Type: multipart/mixed;\r\n" . 
    " boundary=\"{$mime}\""; 

    if($multi == TRUE && is_array($to)){ 
     foreach($to as $item) 
     { 
      mail(trim($item),$subject,$body,$headers); 
     } 
     return TRUE; 
    }else{ 
     return mail($to,$subject,$body,$headers); 
    } 
} 
+2

'cat your_code | stackoverflow - 问题>答案......换句话说...发布你的代码:-) – prodigitalson 2010-09-30 14:15:22

+0

那里你是:) ..代码是不是问题,因为我说..这是工作,我恢复到修改在svn中,仍然发送1个而不是3个附件,因为它用于发送 – cosmicodelnorte 2010-09-30 15:15:34

回答

0

难道你也许在某个时刻的举动西奥的for外循环以下:

$semi_rand = md5(time()); 
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

我从来没有尝试过像这样从头创建一个复杂的多部分信息(我总是我们e像Swift Mailer或Zend_Mail这样的现有库),但不是每个文件都必须是它自己的部分,因此有它自己的边界?