天天看點

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

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

<code>01</code>

<code>&lt;?php   </code>

<code>02</code>

<code>    </code><code>$to</code> <code>=</code><code>"[email protected]"</code><code>; </code>

<code>03</code>

<code>    </code> 

<code>04</code>

<code>    </code><code>$user</code> <code>=</code><code>"Gonn"</code><code>;</code>

<code>05</code>

<code>    </code><code>$date</code> <code>=</code><code>date</code><code>(</code><code>"Y年m月d日"</code><code>);</code>

<code>06</code>

<code>07</code>

<code>    </code><code>$headers</code>  <code>=</code><code>'MIME-Version: 1.0'</code> <code>.</code><code>"\r\n"</code><code>;</code>

<code>08</code>

<code>    </code><code>$headers</code> <code>.=</code><code>'Content-type: text/html; charset=utf-8'</code> <code>.</code><code>"\r\n"</code><code>;</code>

<code>09</code>

<code>    </code><code>$headers</code> <code>.=</code><code>"To: $to \r\n"</code><code>;</code>

<code>10</code>

<code>    </code><code>$headers</code> <code>.=</code><code>"Cc: [email protected] \r\n"</code><code>;</code>

<code>11</code>

<code>    </code><code>$headers</code> <code>.=</code><code>'From: [email protected]'</code> <code>.</code><code>"\r\n"</code><code>;</code>

<code>12</code>

<code>13</code>

<code>    </code><code>$subject</code> <code>=</code><code>"珠海生活圈"</code><code>; </code>

<code>14</code>

<code>    </code><code>$subject</code> <code>=</code><code>"=?UTF-8?B?"</code><code>.</code><code>base64_encode</code><code>(</code><code>$subject</code><code>).</code><code>"?="</code><code>;</code>

<code>15</code>

<code> </code> 

<code>16</code>

<code>    </code><code>$content</code> <code>=</code><code>'親愛的'</code><code>.</code><code>"$user"</code><code>.</code><code>':'</code><code>.</code><code>'&lt;br /&gt;'</code><code>; </code>

<code>17</code>

<code>    </code><code>$content</code> <code>.=</code><code>'&lt;br /&gt;'</code><code>; </code>

<code>18</code>

<code>    </code><code>$content</code> <code>.=</code><code>"感謝您注冊珠海生活圈,精彩的生活從珠海生活圈開始!"</code><code>.</code><code>'&lt;br /&gt;'</code><code>; </code>

<code>19</code>

<code>    </code><code>$content</code> <code>.=</code><code>"在珠海生活圈,您可以:"</code><code>.</code><code>'&lt;br /&gt;'</code><code>; </code>

<code>20</code>

<code>    </code><code>$content</code> <code>.=</code><code>"查詢珠海的商家情況,友善您生活與娛樂。"</code><code>.</code><code>'&lt;br /&gt;'</code><code>; </code>

<code>21</code>

<code>    </code><code>$content</code> <code>.=</code><code>"了解最近珠海舉行的活動,讓您的生活更加豐富。"</code><code>.</code><code>'&lt;br /&gt;'</code><code>; </code>

<code>22</code>

<code>    </code><code>$content</code> <code>.=</code><code>"浏覽新聞熱點,擴充知識面。"</code><code>.</code><code>'&lt;br /&gt;'</code><code>; </code>

<code>23</code>

<code>24</code>

<code>25</code>

<code>26</code>

<code>    </code><code>$content</code> <code>.=</code><code>"珠海生活圈團隊"</code><code>.</code><code>'&lt;br /&gt;'</code><code>;</code>

<code>27</code>

<code>    </code><code>$content</code> <code>.=</code><code>"$date"</code><code>.</code><code>'&lt;br /&gt;'</code><code>; </code>

<code>28</code>

<code>29</code>

<code>    </code><code>$result</code> <code>= mail(</code><code>$to</code><code>,</code><code>$subject</code><code>,</code><code>$content</code><code>,</code><code>$headers</code><code>); </code>

<code>30</code>

<code>31</code>

<code>    </code><code>if</code><code>(</code><code>$result</code><code>)</code>

<code>32</code>

<code>    </code><code>{</code>

<code>33</code>

<code>        </code><code>echo</code> <code>'郵件發送成功!'</code><code>;</code>

<code>34</code>

<code>    </code><code>}</code>

<code>35</code>

<code>36</code>

<code>?&gt; </code>

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

還有郵件的類型設定為$headers = 'MIME-Version: 1.0' . "\r\n";。

摘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' . "\r\n"; 當制定類型為 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,如需轉載請自行聯系原作者