2015-10-16 70 views
0

我目前遇到郵件問題。它發送得很好,我得到一個名稱和大小的附件,但無法打開。 另外我已經嘗試PHPMailer和SMTP不能在我的服務器上工作,所以請不要指教我去吧:)PHP - 郵件附件無法打開

對不起,關於法國變量名稱和錯誤消息,但我不認爲它會有用。我可以翻譯,如果你需要它當然。

這是一段代碼,照顧我的依戀。

if(isset($_FILES["fichier"]) && $_FILES['fichier']['name'] != ""){ 
     $nom_fichier = $_FILES['fichier']['name']; 
     $source = $_FILES['fichier']['tmp_name']; 
     $type_fichier = $_FILES['fichier']['type']; 
     $taille_fichier = $_FILES['fichier']['size']; 

     if($nom_fichier != ".htaccess"){ 
      if($type_fichier == "image/jpeg" 
       || $type_fichier == "image/pjpeg" 
       || $type_fichier == "application/pdf"){ 

       if ($taille_fichier <= 2097152) { 
        $tabRemplacement = array("é"=>"e", "è"=>"e", "à"=>"a"); 

        echo("Nom du fichier : ".$nom_fichier."<br/>"); 
        echo("Nom du fichier temporaire : ".$source."<br/>"); 
        echo("Type du fichier : ".$type_fichier."<br/>"); 
        echo("Taille du fichier : ".$taille_fichier."<br/>"); 

        $handle = fopen($source, 'r'); 
        $content = fread($handle, $taille_fichier); 
        $encoded_content = chunk_split(base64_encode($content)); 
        $f = fclose($handle); 

        $email_message .= $passage_ligne . "--" . $boundary . $passage_ligne; 
        $email_message .= 'Content-type:'.$type_fichier.';name='.$nom_fichier."\n"; 
        $email_message .= 'Content-transfer-encoding:base64'."\n"; 
        $email_message .= $encoded_content."\n"; 
        //$email_message .= $passage_ligne . "--" . $boundary . "--" . $passage_ligne; 
       }else{ 
//Error message 
        $email_message .= $passage_ligne ."L'utilisateur a tenté de vous envoyer une pièce jointe mais celle ci était superieure à 2Mo.". $passage_ligne; 
       } 
      }else{ 
//Error message 
       $email_message .= $passage_ligne ."L'utilisateur a tenté de vous envoyer une pièce jointe mais elle n'était pas au bon format.". $passage_ligne; 
      } 
     }else{ 
//Error message 
      $email_message .= $passage_ligne ."L'utilisateur a tenté de vous envoyer une pièce jointe .htaccess.". $passage_ligne; 
     } 
    } 
+0

顯然馬里奧不閱讀帖子,只是標記一切重複,因爲我已經閱讀過這篇文章之前,它並沒有幫助我... – Malane

回答

0

你應該在內容前有兩個換行符。該郵件應該是這樣的:

Content-Type: multipart/alternative; boundary=foobar 

--foobar 
Content-Type: … 
Content-Transfer-Encoding: … 

base64data… 
--foobar-- 

你缺少Content-Transfer-Encoding和你的數據之間的白線。

+0

你的意思是這樣嗎? $ email_message。='內容傳輸編碼:base64'。「\ n」; $ email_message。=「\ n」; $ email_message。= $ encoded_content。「\ n」; – Malane

+0

它的工作!非常感謝:D – Malane