酷!學園

技術討論區 => 程式討論版 => PHP程式設計討論區 => 主題作者是: madwhk 於 2010-12-31 20:36

主題: 不能寄兩附件
作者: madwhk2010-12-31 20:36
我想寄出兩附件,但只寄出第一附件
第一附件是text
第二附件是pdf
希望可幫忙解決

<?php

     $mail_to = "xx"; 
     $from_mail = "a@a.com"; 
     $from_name = "a";
     $reply_to = "a@a.com"; 
     $subject = "xx"; 
     $message = "None";

 /* Attachment File */
     // Attachment location
     $file_name1 = "textFile.txt"; 
   
     // Read the file content 
     $file1 = $file_name1; 
     $file_size1 = filesize($file1); 
     $handle1 = fopen($file1, "r"); 
     $content1 = fread($handle1, $file_size1); 
     fclose($handle1); 
     $content1 = chunk_split(base64_encode($content1));


     // Attachment location
     $file_name2 = "textFile.pdf"; 
   
     // Read the file content 
     $file2 = $file_name2; 
     $file_size2 = filesize($file2); 
     $handle2 = fopen($file2, "r"); 
     $content2 = fread($handle2, $file_size2); 
     fclose($handle2); 
     $content2 = chunk_split(base64_encode($content2));

   
     /* Set the email header */
     // Generate a boundary 
     $boundary = md5(uniqid(time())); 
   
     // Email header 
     $header = "From: ".$from_name." <".$from_mail.">\r\n"; 
     $header .= "Reply-To: ".$reply_to."\r\n"; 
     $header .= "MIME-Version: 1.0\r\n"; 
   
     // Multipart wraps the Email Content and Attachment 
     $header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n"; 
     $header .= "This is a multi-part message in MIME format.\r\n"; 
     $header .= "--".$boundary."\r\n"; 
   
     // Email content 
     // Content-type can be text/plain or text/html 
     $header .= "Content-type:text/plain; charset=big5\r\n"; 
     $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 
     $header .= "$message\r\n"; 
     $header .= "--".$boundary."\r\n"; 
   
     // Attachment 
     $header .= "Content-Type: text/plain; name=\"".$file_name1."\"\r\n"; 
     $header .= "Content-Transfer-Encoding: base64\r\n"; 
     $header .= "Content-Disposition: attachment; filename=\"".$file_name1."\"\r\n\r\n"; 
     $header .= $content1."\r\n"; 
     $header .= "--".$boundary."--";

     $header .= "Content-Type: application/pdf; name=\"".$file_name2."\"\r\n"; 
     $header .= "Content-Transfer-Encoding: base64\r\n"; 
     $header .= "Content-Disposition: attachment; filename=\"".$file_name2."\"\r\n\r\n"; 
     $header .= $content2."\r\n"; 
     $header .= "--".$boundary."--";


     // Send email 
     if (mail($mail_to, $subject, "", $header)) { 
         echo "Sent"; 
     } else { 
         echo "Error"; 
     }

?>
主題: 回覆: 不能寄兩附件
作者: Yamaka2010-12-31 21:21
我想寄出兩附件,但只寄出第一附件
第一附件是text
第二附件是pdf
希望可幫忙解決


要不要試試像 phpmailer 這類的套件
要寄附加檔不用自己打輪子  :D :D

主題: 回覆: 不能寄兩附件
作者: TyroneYeh2011-01-01 17:23
附件放到 body 裡面可以嗎?
主題: 回覆: 不能寄兩附件
作者: madwhk2011-01-01 19:30
我忘了說
我的系統是
Linux RH6 + php4.0 + mysql3.1
(因很多問題是不可更新的) :-X
有很多新套件也用不了
所以一切要自己寫 :'(

我看見
$header .= "Content-Type: text/plain; name="".$file_name1.""\r\n";
$header .= "Content-Type: application/pdf; name="".$file_name2.""\r\n";
應是
$header .= "Content-Type: text/plain; name=".$file_name1."\r\n";
$header .= "Content-Type: application/pdf; name=".$file_name2."\r\n";

還望各位幫忙
主題: 回覆: 不能寄兩附件
作者: Yamaka2011-01-01 19:56
我忘了說
我的系統是
Linux RH6 + php4.0 + mysql3.1
(因很多問題是不可更新的) :-X
有很多新套件也用不了
所以一切要自己寫 :'(

我看見
$header .= "Content-Type: text/plain; name="".$file_name1.""\r\n";
$header .= "Content-Type: application/pdf; name="".$file_name2.""\r\n";
應是
$header .= "Content-Type: text/plain; name=".$file_name1."\r\n";
$header .= "Content-Type: application/pdf; name=".$file_name2."\r\n";

還望各位幫忙

嗯, 那有沒有將結果直接先印出來跟實際用 mail 軟體寄出的內容比對看看?
可能是 Content-Type 宣告的問題, 或是 boundary 使用錯誤
最好是能直接跟 mail 軟體建立的信件內容直接比對

10幾年前自己用 delphi 開發寄信元件時, 這部分也是弄得很頭大
那時候也是一行一行慢慢去比對自己建立的內容
主題: 回覆: 不能寄兩附件
作者: madwhk2011-01-03 22:04
 :( 全是web mail或系統收信
看不到信件內容
主題: 回覆: 不能寄兩附件
作者: Yamaka2011-01-04 00:30
:( 全是web mail或系統收信
看不到信件內容

那是你的問題啊
既然要自己刻輪子
那就想辦法找出信件原始內容
php 這邊可以先註解mail()這行
然後將信件內容與header都印出來
兩邊一比對, 應該就知道問題在哪裡了
主題: 回覆: 不能寄兩附件
作者: Yamaka2011-01-04 00:51
不然就試試這個吧

http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php4/ (http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php4/)

README:

PHPMailer

Full Featured Email Transfer Class for PHP

=========================================

Version 2.0.4 (April 02, 2009)


This is the last version to support PHP4........
主題: 回覆: 不能寄兩附件
作者: micmic32011-01-04 09:41
仔細看了一下 $boundary 是一樣的當然只能傳一個檔
主題: 回覆: 不能寄兩附件
作者: madwhk2011-01-06 23:22
我開始時的程式碼是正確,只是在第一附件和第二附件間
$header .= $content1."\r\n";
$header .= "--".$boundary."--";
$header .= "Content-Type: application/pdf; name="".$file_name2.""\r\n";
改為
$header .= "--".$boundary."\r\n";
便解決問題
多謝各位大大幫忙