作者 主題: 不能寄兩附件  (閱讀 6418 次)

0 會員 與 1 訪客 正在閱讀本文。

madwhk

  • 可愛的小學生
  • *
  • 文章數: 13
    • 檢視個人資料
不能寄兩附件
« 於: 2010-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"; 
     }

?>

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 不能寄兩附件
« 回覆 #1 於: 2010-12-31 21:21 »
我想寄出兩附件,但只寄出第一附件
第一附件是text
第二附件是pdf
希望可幫忙解決


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


TyroneYeh

  • 俺是博士!
  • *****
  • 文章數: 2396
  • 性別: 男
    • 檢視個人資料
回覆: 不能寄兩附件
« 回覆 #2 於: 2011-01-01 17:23 »
附件放到 body 裡面可以嗎?
--
TyroneYeh

madwhk

  • 可愛的小學生
  • *
  • 文章數: 13
    • 檢視個人資料
回覆: 不能寄兩附件
« 回覆 #3 於: 2011-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";

還望各位幫忙
« 上次編輯: 2011-01-01 19:40 由 madwhk »

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 不能寄兩附件
« 回覆 #4 於: 2011-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 開發寄信元件時, 這部分也是弄得很頭大
那時候也是一行一行慢慢去比對自己建立的內容

madwhk

  • 可愛的小學生
  • *
  • 文章數: 13
    • 檢視個人資料
回覆: 不能寄兩附件
« 回覆 #5 於: 2011-01-03 22:04 »
 :( 全是web mail或系統收信
看不到信件內容

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 不能寄兩附件
« 回覆 #6 於: 2011-01-04 00:30 »
:( 全是web mail或系統收信
看不到信件內容

那是你的問題啊
既然要自己刻輪子
那就想辦法找出信件原始內容
php 這邊可以先註解mail()這行
然後將信件內容與header都印出來
兩邊一比對, 應該就知道問題在哪裡了

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: 不能寄兩附件
« 回覆 #7 於: 2011-01-04 00:51 »
不然就試試這個吧

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........

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
回覆: 不能寄兩附件
« 回覆 #8 於: 2011-01-04 09:41 »
仔細看了一下 $boundary 是一樣的當然只能傳一個檔
« 上次編輯: 2011-01-04 09:48 由 micmic3 »

madwhk

  • 可愛的小學生
  • *
  • 文章數: 13
    • 檢視個人資料
回覆: 不能寄兩附件
« 回覆 #9 於: 2011-01-06 23:22 »
我開始時的程式碼是正確,只是在第一附件和第二附件間
$header .= $content1."\r\n";
$header .= "--".$boundary."--";
$header .= "Content-Type: application/pdf; name="".$file_name2.""\r\n";
改為
$header .= "--".$boundary."\r\n";
便解決問題
多謝各位大大幫忙