PHP發送郵件的小程序很簡單,不過有些需要注意的地方。先上代碼:
<?php $to = "[email protected]"; $user = "Gonn"; $date = date("Y年m月d日"); $headers = 'MIME-Version: 1.0' . "rn"; $headers .= 'Content-type: text/html; charset=utf-8' . "rn"; $headers .= "To: $to rn"; $headers .= "Cc: [email protected] rn"; $headers .= 'From: [email protected]' . "rn"; $subject = "珠海生活圈"; $subject = "=?UTF-8?B?".base64_encode($subject)."?="; $content = '親愛的'."$user".':'.'<br />'; $content .= '<br />'; $content .= "感謝您注冊珠海生活圈,精彩的生活從珠海生活圈開始!".'<br />'; $content .= "在珠海生活圈,您可以:".'<br />'; $content .= "查詢珠海的商家情況,方便您生活與娛樂。".'<br />'; $content .= "了解最近珠海舉行的活動,讓您的生活更加豐富。".'<br />'; $content .= "浏覽新聞熱點,擴展知識面。".'<br />'; $content .= '<br />'; $content .= "珠海生活圈 -- 為建成珠海最大的商家數據庫而不斷努力著。 ".'<a href="http://www.zhuhailife.net" target="_blank">www.zhuhailife.net</a>'.'<br />'; $content .= '<br />'; $content .= "珠海生活圈團隊".'<br />'; $content .= "$date".'<br />'; $result = mail($to, $subject, $content, $headers); if($result) { echo '郵件發送成功!'; } ?>
有幾個需要注意的地方。如果上面的代碼沒有 $subject = "=?UTF-8?B?".base64_encode($subject)."?="; 這麼一句,你會發現郵件的標題是亂碼,而郵件正文卻是正確的。郵件頭需要先用函數base64_encode(),就是使用 MIME base64 對數據進行編碼。標題字符串前加編碼類型例如: =?UTF-8?B?。
還有郵件的類型設置為$headers = 'MIME-Version: 1.0' . "rn";。
摘wiki的解釋:多用途互聯網郵件擴展(MIME,Multipurpose Internet Mail Extensions)是一個互聯網標准,它擴展了電子郵件標准,使其能夠支持非ASCII字符、二進制格式附件等多種格式的郵件消息。這個標准被定義在RFC 2045、RFC 2046、RFC 2047、RFC 2048、RFC 2049等RFC中。 由RFC 822轉變而來的RFC 2822,規定電子郵件標准並不允許在郵件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英語字符消息和二進制文件,圖像,聲音等非文字消息都不能在電子郵件中傳輸。MIME規定了用於表示各種各樣的數據類型的符號化方法。 此外,在萬維網中使用的HTTP協議中也使用了MIME的框架。
MIME是通過標准化電子郵件報文的頭部的附加領域(fields)而實現的;這些頭部的附加領域,描述新的報文類型的內容和組織形式。
$headers .= 'Content-type: text/html; charset=utf-8' . "rn"; 當制定類型為 html的時候,郵件正文就可以使用 HTML 的標簽了。
幾種常見的類型:
此外,尚未被接受為正式數據類型的subtype,可以使用x-開始的獨立名稱(例如application/x-gzip)。vnd-開始的固有名稱也可以使用(例:application/vnd.ms-excel)。
parameter可以用來指定附加的信息,更多情況下是用於指定text/plain和text/htm等的文字編碼方式的charset參數。MIME根據type制定了默認的subtype,當客戶端不能確定消息的subtype的情況下,消息被看作默認的subtype進行處理。Text默認是text/plain,Application默認是application/octet-stream而Multipart默認情況下被看作multipart/mixed。