2011-09-01 240 views
58

當我發出電子郵件時,電子郵件不會顯示英文以外的字符。 它顯示象下面這樣:如何發送UTF-8電子郵件?

ä½™C」雅»ä»

實際上可能知道是什麼原因? 即使我試圖在腳本中添加Content-type和charset,它仍然顯示相同。

我以前Mail::Factory("mail");

+2

你使用什麼?本地'mail()'或'Zend_Mail'或'PHPMailer'?需要Factory方法的一些代碼! –

+2

你必須額外照顧目標電子郵件客戶端。即使您設法在您的電子郵件客戶端中正確查看電子郵件,也並不意味着您的客戶將看到正確的郵件。最後,我總是使用utf-8字符集標題生成html電子郵件。這樣大多數電子郵件客戶端都能正確顯示內容。 – Marco

+0

@FlyBy:是的,正是我想要做的,用utf-8字符集顯示內容,但我仍然無法正確看到電子郵件。 – deepWebMie

回答

83

您可以添加標題 「的Content-Type:text/html的;字符集= UTF-8」 到你的郵件正文。

$headers = "Content-Type: text/html; charset=UTF-8"; 

如果您使用本地mail()功能$頭陣列將成爲第4個參數 mail($to, $subject, $message, $headers)

如果用戶PEAR的Mail :: factory()方法的代碼將是:

$smtp = Mail::factory('smtp', $params); 

$mail = $smtp->send($to, $headers, $body); 
+0

這裏是我的代碼 $ mail = Mail :: factory(「mail」); $ to =「[email protected]」; $ body =「好信」; $ headers = array(「Content-type =>」text/plain:charset = \「UTF-8」,「From」=>「[email protected]」,「To」=>「[email protected] 「,」Subject「=>」測試發送中文郵件 - 好信「); $ MAIL->發($到,$標題,$體) 這是正確的嗎?它沒有顯示我期望的。它應該在正文,標題或主題中顯示中文單詞。 – deepWebMie

+0

UTF-8需要8位。大多數電子郵件工具仍然使用:Content-Transfer-Encoding:7bit。結果將取決於您的內容通過的工具,但嘗試向Content-Transfer-Encoding的標頭數組添加條目:8bit – ClearCrescendo

+1

哪些電子郵件工具使用7位傳輸編碼? – Grodriguez

25

我m使用相當指定的字符集(ISO-8859-2),因爲不是每個郵件系統(例如:http://10minutemail.com)都可以讀取UTF-8郵件。如果你需要這個:

function utf8_to_latin2($str) 
{ 
    return iconv ('utf-8', 'ISO-8859-2' , $str); 
} 
function my_mail($to,$s,$text,$form, $reply) 
    { 
     mail($to,utf8_to_latin2($s),utf8_to_latin2($text), 
     "From: $form\r\n". 
     "Reply-To: $reply\r\n". 
     "X-Mailer: PHP/" . phpversion()); 
    } 

我已經做了另一個郵件函數,因爲蘋果設備不能很好地讀取以前的版本。

function utf8mail($to,$s,$body,$from_name="x",$from_a = "[email protected]", $reply="[email protected]") 
{ 
    $s= "=?utf-8?b?".base64_encode($s)."?="; 
    $headers = "MIME-Version: 1.0\r\n"; 
    $headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n"; 
    $headers.= "Content-Type: text/plain;charset=utf-8\r\n"; 
    $headers.= "Reply-To: $reply\r\n"; 
    $headers.= "X-Mailer: PHP/" . phpversion(); 
    mail($to, $s, $body, $headers); 
} 
+0

它的作品!謝啦。 – MilanG

+2

如果您嘗試發送無法用ISO-8859-2表示的內容,該怎麼辦? 「#: – deceze

+4

'$ headers。=」From:=?utf-8?b?「。base64_encode($ from_name)。」?= <".$from_a."> \ r \ n「;'這一行解決了我的問題,謝謝! – Julia