2012-06-07 77 views
-1

嗨,我有代碼發送帶有多個附件的電子郵件,但我遇到了下面一段代碼的問題。文件的附件類型

每當我提交圖像,我得到「Unsuported文件格式!」。如果我刪除那部分代碼,它的效果很好,但用戶可以發送每種類型的文件(這是危險的,我知道)。文件大小檢查很好。哪裏不對? :S

//*** Attachment ***// 
for($i=0;$i<count($_FILES["fileAttach"]["name"]);$i++) 
{ 
    $filesize = $_FILES["fileAttach"]["size"][$i]/1024; 

    if($_FILES["fileAttach"]["name"][$i] != "" && $filesize < 50 && preg_match("image/", $_FILES["fileAttach"]["type"][$i])) 
    { 
    $strFilesName = $_FILES["fileAttach"]["name"][$i]; 
    $strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"][$i]))); 
    $strHeader .= "--".$strSid."\n"; 
    $strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
    $strHeader .= "Content-Transfer-Encoding: base64\n"; 
    $strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n"; 
    $strHeader .= $strContent."\n\n"; 
    } 
    elseif(!preg_match("image/", $_FILES["fileAttach"]["type"][$i])){ 
     die('<div id="warning">Unsuported file format!</div>'); 
    } 
    elseif($filesize > 50){ 
     die('<div id="warning">Filesize must be less than 2 Mb!!!</div>'); 
     } 
} 

回答

2
$strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 

應該僅僅是

$strHeader .= "Content-type: application/octet-stream\n"; 

沒有文件名部分。這將進入內容處置線。

在更大的圖片視圖中,請勿建立自己的mime電子郵件。正如你發現的那樣,這很痛苦和醜陋。使用PHPMailerSwiftmailer爲你做 - 整個附件業務可以減少到一個SINGLE函數調用任一庫。

+0

恩,恩,我會用它來做未來的項目。但我無法大量修改現有項目(在許多網站上),所以我試圖以某種方式解決這個「bug」,但我只是無法弄清楚。 – SomeoneS