您好,登錄后才能下訂單哦!
這篇文章運用簡單易懂的例子給大家介紹如何解決php的mail函數(shù)發(fā)送UTF-8編碼中文郵件時標題亂碼的問題,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
php的mail函數(shù)發(fā)送UTF-8編碼中文郵件時標題亂碼的解決辦法:1、將subject里頭的文字符合RFC 2047的規(guī)范;2、在headers中添加【content-type】;3、對用來發(fā)送郵件的主機進行正確配置。
php的mail函數(shù)發(fā)送UTF-8編碼中文郵件時標題亂碼的解決辦法:
1.使用 PEAR 的 Mail 類
PEAR 的 Mail 類可以讓你選擇使用 sendmail 或者 SMTP 方式發(fā)信,這樣的包裝好的接口很好用,你沒有必要去自己重新發(fā)明輪子。
2.關于headers 中subject 的亂碼
不要把任何除了iso-8859-1
編碼之外的文字直接放進subject,正確的方式是讓subject 里頭的文字符合RFC 2047
的規(guī)范,假設你的subject 處的文字的編碼是GB2312
,那么正確的subject 應該是這樣的格式
$headers['subject'] = '=?GB2312?B?' . base64_encode('標題文字') . '?=';
如果是UTF-8 的話,把上面開頭的GB2312 替換成UTF-8 即可。推薦在標題處使用GB2312 編碼,因為MTA 的分化實在是嚴重,大部分的MSP使用的都是自己開發(fā)的 MTA,而相信國內的大部分 MTA 無論如何都是可以支持 GB2312 編碼的。
而如果是發(fā)送到國外的MSP,則推薦你在subject 處使用經過base64 編碼的 UTF-8 文字,因為他們很可能不支持 GB2312 編碼。
3.一定在headers 中添加content-type
電子郵件的 headers 中的 content-type
處類似網頁的,也是 text/plain; charset=gb2312
這樣的格式。這個選項主要對收郵件的客戶端有意義,可以避免在客戶端出現(xiàn)亂碼,部分的 Webmail 也會根據(jù)這里的設置對郵件的內容進行編碼轉換以正確顯示。你可以設想一下你用 gb2312 編碼發(fā)到 .com.tw
的郵箱時候的情況。
4.對你用來發(fā)送郵件的主機進行正確配置
1)一定配置反向解析,因為大部分的非固定 IP 都無法做反向解析,部分反垃圾郵件策略以此作為判斷依據(jù)。
2)一定配置 MX 解析,道理同上。
3)確保你的 return path 是能夠收到退信的,否則你的郵件發(fā)送服務器可能會進入接收端的黑名單。
$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 對數(shù)據(jù)進行編碼
標題字符串前加編碼類型例如: =?UTF-8?B?
標題字符串后加:?=
例如:
<?php $to = "clairelume@qq.com"; //將此電子郵件地址改為自己的。 $name = $_POST['name']; $email = $_POST['email']; $subject = "來自博客讀者的郵件"; $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ā)送。'; ?>
這樣,發(fā)送的中文郵件標題就不是亂碼了。
關于如何解決php的mail函數(shù)發(fā)送UTF-8編碼中文郵件時標題亂碼的問題就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。