2014-01-29 64 views
1

目前,該郵件被呈現如下:PHP郵件不渲染西班牙口音正確

Ω₯ζλZΫiz«’Ό*'΅ινO*^rνz{ 

我設置以下標題:

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n"; 
$headers .= "X-Priority: 3\r\n"; 
$headers .= "X-Mailer: PHP". phpversion() ."\r\n"; 

樣品身體信息是:

Estudio bíblico en Web Church Connect 

我還設置HTML的字符集:

$message = ' 
    <html> 
     <head> 
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
      <title>WebChurchConnect</title> 
     </head> 
     <body> 
'; 

任何想法是讚賞。

謝謝。

+2

你聲明你的文本爲UTF-8。它實際上是UTF-8嗎? (另外,你似乎沒有設置Content-Transfer-Encoding標頭。) –

+0

不要依賴於'。明確地發送內容類型和字符集:'header('Content-Type:text/html; charset = utf-8');' – Linblow

回答

2

電子郵件只接受ASCII字符,因爲許多MTA沒有配備正確的中繼其他消息。你應該想到像洋蔥一樣的MIME-E-Mail:(他們聞到,他們讓你哭),他們有。 HTML郵件(內層)只有在處理郵件的純文本(外層)後才能被解碼。

您需要在「外層」中明確編碼任何非ASCII字符。您可以使用Content-Transfer-Encoding標題進行設置,標題可以設置爲base64quoted-printable(某些現代MTA也支持8bitbinary,但這些必須明確設置,支持仍然不如2014年期望的普遍性)。當然,這個頭文件後面的MIME部分也需要使用指定的方法進行實際編碼。幸運的是Base64編碼只是撥打base64_encode。您也可以使用HTML的轉義機制(例如&iacute;而不是í),但是Base64的是(如果您使用的是純文本格式)一般來說比較安全,因爲它可以避免在78個字符後自動分裂長線的MTA。

+0

設置$ headers。=「Content-Transfer-Encoding:8bit \ r \ n」;解決了這個問題。 – Dani

1

嘗試使用PHPMailerSwiftMailer。像這樣的問題已經解決了,一切都經過了測試,而且它更容易處理。