如何利用PHP通過mail方法傳送郵件【轉】

老朱教授發表於2017-10-01

PHP傳送郵件的小程式很簡單,不過有些需要注意的地方。先上程式碼:

01 <?php   
02     $to = "gonnsai@163.com"
03      
04     $user = "Gonn";
05     $date = date("Y年m月d日");
06      
07     $headers  = `MIME-Version: 1.0` . "
"
;
08     $headers .= `Content-type: text/html; charset=utf-8` . "
"
;
09     $headers .= "To: $to
"
;
10     $headers .= "Cc: 252211974@qq.com
"
;
11     $headers .= `From: gonnsai@163.com` . "
"
;
12  
13     $subject = "珠海生活圈"
14     $subject = "=?UTF-8?B?".base64_encode($subject)."?=";
15   
16     $content = `親愛的`."$user".`:`.`<br />`
17     $content .= `<br />`
18     $content .= "感謝您註冊珠海生活圈,精彩的生活從珠海生活圈開始!".`<br />`
19     $content .= "在珠海生活圈,您可以:".`<br />`
20     $content .= "查詢珠海的商家情況,方便您生活與娛樂。".`<br />`
21     $content .= "瞭解最近珠海舉行的活動,讓您的生活更加豐富。".`<br />`
22     $content .= "瀏覽新聞熱點,擴充套件知識面。".`<br />`
23     $content .= `<br />`
24     $content .= "珠海生活圈 -- 為建成珠海最大的商家資料庫而不斷努力著。 ".`<a href="http://www.zhuhailife.net" target="_blank">www.zhuhailife.net</a>`.`<br />`;
25     $content .= `<br />`
26     $content .= "珠海生活圈團隊".`<br />`;
27     $content .= "$date".`<br />`
28  
29     $result = mail($to, $subject, $content, $headers); 
30      
31     if($result)
32     {
33         echo `郵件傳送成功!`;
34     }
35      
36 ?> 

有幾個需要注意的地方。如果上面的程式碼沒有 $subject = “=?UTF-8?B?”.base64_encode($subject).”?=”; 這麼一句,你會發現郵件的標題是亂碼,而郵件正文卻是正確的。郵件頭需要先用函式base64_encode(),就是使用 MIME base64 對資料進行編碼。標題字串前加編碼型別例如: =?UTF-8?B?。

還有郵件的型別設定為$headers = `MIME-Version: 1.0` . ”
“;。

摘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` . ”
“; 當制定型別為 html的時候,郵件正文就可以使用 HTML 的標籤了。

幾種常見的型別:

  • text/plain(純文字)
  • text/html(HTML文件)
  • application/xhtml+xml(XHTML文件)
  • image/jpeg(JPEG影像)【PHP中為:image/pjpeg】
  • image/gif(GIF影像)
  • image/png(PNG影像)【PHP中為:image/x-png】
  • video/mpeg(MPEG動畫)
  • application/pdf(PDF文件)
  • application/msword(Microsoft Word檔案)
  • application/octet-stream(任意的二進位制資料)
  • application/x-www-form-urlencoded(使用HTTP的POST方法提交的表單)
  • multipart/form-data(同上,但主要用於表單提交時伴隨檔案上傳的場合)

此外,尚未被接受為正式資料型別的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。






本文轉自黃聰部落格園部落格,原文連結:http://www.cnblogs.com/huangcong/archive/2011/05/19/2050616.html,如需轉載請自行聯絡原作者


相關文章