在php中使用mail函數(shù)發(fā)送UTF-8編碼郵件時(shí)標(biāo)題出現(xiàn)亂碼如何解決?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
php是一個(gè)嵌套的縮寫(xiě)名稱,是英文超級(jí)文本預(yù)處理語(yǔ)言,它的語(yǔ)法混合了C、Java、Perl以及php自創(chuàng)新的語(yǔ)法,主要用來(lái)做網(wǎng)站開(kāi)發(fā),許多小型網(wǎng)站都用php開(kāi)發(fā),因?yàn)閜hp是開(kāi)源的,從而使得php經(jīng)久不衰。
1.使用 PEAR 的 Mail 類(lèi)
PEAR 的 Mail 類(lèi)可以讓你選擇使用 sendmail 或者 SMTP 方式發(fā)信,這樣的包裝好的接口很好用,你沒(méi)有必要去自己重新發(fā)明輪子。
2.關(guān)于headers 中subject 的亂碼
不要把任何除了 iso-8859-1 編碼之外的文字直接放進(jìn)subject,正確的方式是讓subject 里頭的文字符合RFC 2047 的規(guī)范,假設(shè)你的subject 處的文字的編碼是GB2312,那么正確的subject應(yīng)該是這樣的格式
$headers['subject'] = '=?GB2312?B?' . base64_encode('標(biāo)題文字') . '?=';
如果是UTF-8 的話,把上面開(kāi)頭的GB2312 替換成UTF-8 即可。推薦在標(biāo)題處使用GB2312 編碼,因?yàn)镸TA 的分化實(shí)在是嚴(yán)重,大部分的MSP使用的都是自己開(kāi)發(fā)的 MTA,而相信國(guó)內(nèi)的大部分 MTA 無(wú)論如何都是可以支持 GB2312 編碼的。
而如果是發(fā)送到國(guó)外的MSP,則推薦你在subject 處使用經(jīng)過(guò)base64 編碼的 UTF-8 文字,因?yàn)樗麄兒芸赡懿恢С?GB2312 編碼。
3.一定在headers 中添加content-type
電子郵件的 headers 中的 content-type 處類(lèi)似網(wǎng)頁(yè)的,也是 text/plain; charset=gb2312 這樣的格式。這個(gè)選項(xiàng)主要對(duì)收郵件的客戶端有意義,可以避免在客戶端出現(xiàn)亂碼,部分的 Webmail 也會(huì)根據(jù)這里的設(shè)置對(duì)郵件的內(nèi)容進(jìn)行編碼轉(zhuǎn)換以正確顯示。你可以設(shè)想一下你用 gb2312 編碼發(fā)到 .com.tw 的郵箱時(shí)候的情況。
4.對(duì)你用來(lái)發(fā)送郵件的主機(jī)進(jìn)行正確配置
1)一定配置反向解析,因?yàn)榇蟛糠值姆枪潭?IP 都無(wú)法做反向解析,部分反垃圾郵件策略以此作為判斷依據(jù)。
2)一定配置 MX 解析,道理同上。
3)確保你的 return path 是能夠收到退信的,否則你的郵件發(fā)送服務(wù)器可能會(huì)進(jìn)入接收端的黑名單。
$subject = stripslashes($the_post['Title']); $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=utf-8\r\n"; $headers .= "Content-Transfer-Encoding: 8bit\r\n"; $message = stripslashes(strip_tags($the_post['Content'])); mail($to, $subject, $message, $headers);
先用函數(shù)base64_encode() — 使用MIME base64 對(duì)數(shù)據(jù)進(jìn)行編碼
標(biāo)題字符串前加編碼類(lèi)型例如: =?UTF-8?B?
標(biāo)題字符串后加:?=
例如:
<?php $to = "clairelume@qq.com"; //將此電子郵件地址改為自己的。 $name = $_POST['name']; $email = $_POST['email']; $subject = "來(lái)自博客讀者的郵件"; $subject = "=?UTF-8?B?".base64_encode($subject)."?="; $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=utf-8\r\n"; $headers .= "Content-Transfer-Encoding: 8bit\r\n"; $message = $_POST['message']; mail($to,$subject,$message,"From: ".$email."",$headers); echo 'OK '.$name.', 您的郵件已發(fā)送。'; ?>
關(guān)于在php中使用mail函數(shù)發(fā)送UTF-8編碼郵件時(shí)標(biāo)題出現(xiàn)亂碼如何解決問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
本文題目:在php中使用mail函數(shù)發(fā)送UTF-8編碼郵件時(shí)標(biāo)題出現(xiàn)亂碼如何解決-創(chuàng)新互聯(lián)
地址分享:http://jinyejixie.com/article18/psigp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、定制開(kāi)發(fā)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容