最近要開發一個可含附件的PHP程式,以下是我參考的內容
/*
寄信程式
from : 寄件人
mailto : 收件人
subject : 信件標題
msg : 信件內容
filename : 附加檔案
*/
function SendMail(from,mailto,subject,msg,filename=''){ // 傳送 mail
subject = '=?utf-8?B?'.base64_encode("subject").'?='; // 標題加密(防亂碼)
boundary = uniqid( ""); // 產生分隔字串
// 設定MAIL HEADER
headers = '';
headers .= 'MIME-Version: 1.0'."\r\n";
headers .= 'Content-type: multipart/mixed; boundary="'.boundary.'"; charset="UTF-8"'."\r\n"; //宣告分隔字串
headers .= 'From:'.from."\r\n"; // 設定寄件者
headers .= 'X-Mailer: PHP/' . phpversion()."\r\n";
// 信件內容開始
body .= '--'.boundary."\r\n";
body .= 'Content-type: text/plain; charset="UTF-8"'."\r\n";// 信件本文header
body .= 'Content-Transfer-Encoding: 8bit'."\r\n";// 信件本文header
body .= msg."\r\n"; // 本文內容
//附加檔案處理
if(filename){
mimeType = mime_content_type(filename); // 判斷檔案類型 ,php.ini要開啟php_mime_magic.dll
if(!mimeType)mimeType ="application/unknown"; // 若判斷不出則設為未知
fp = fopen(filename, "r"); // 開啟檔案
read = fread(fp, filesize(filename)); // 取得檔案內容
fclose(fp); // 關閉檔案
read = base64_encode(read);//使用base64編碼
read = chunk_split(read); //把檔案所轉成的長字串切開成多個小字串
file = basename(filename); //傳回不包含路徑的檔案名稱(mail中會顯示的檔名)
// 附檔處理開始
body .= '--'.boundary ."n";
// 設定附加檔案HEADER
body .= 'Content-type: '.mimeType.'; name='.file."\r\n";
body .= 'Content-transfer-encoding: base64'."\r\n";
body .= 'Content-disposition: attachment; filename='.file."\r\n";
// 加入附加檔案內容
body .= read ."\r\n";
}//處理附加檔案完畢
body .= "--boundary--";//郵件結尾
mail(mailto, subject, body, headers); // 寄出信件
}
