2011-08-10 50 views
1

奇蹟發送郵件,如果有人可以提供幫助。在UTF-8

我繼承發送一些內容了三種語言的腳本(全部在同一個內容 - 重複)然而,當收到內容中的人物在我的假設是UTF-8的問題打破。

我說的對所有我需要做的是改變部分字符集爲UTF-8,或做其他任何需要改變,如7位一部分?

你能看到我插一個UTF-8引用(沒有測試過)

有此http://bitprison.net/php_mail_utf-8_subject_and_message的東西,這似乎參考基本編碼,但我不知道如果我需要在這裏?

由於

// Contruct message body. 
       $body = ""; 

       // Add message for non-mime clients. 
       $body .= "This is a multi-part message in MIME format.\n"; 

       // Add text body. 
       $body .= "\n--$boundary\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 7bit\n\n" . $textContent; 

       // Add HTML body. 
       $body .= "\n--$boundary\nContent-Type: text/html; charset=ISO-8859-1; format=flowed\nContent-Transfer-Encoding: 7bit\n\n" . $htmlContent; 

       mail($row["email"], "Update Your ArtsDB Listing", $body, $headers); 

更新的代碼,這是可以接受的?我在這裏看了另一篇文章,作爲一個例子。

$body .= "\n--$boundary\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 8bit\n\n" . $textContent; 

      // Add HTML body. 
      $body .= "\n--$boundary\nContent-Type: text/html; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 8bit\n\n" . $htmlContent; 
+1

您有使用3個編碼 - 嘗試使用一個。 –

回答

4

您正在使用Content-Type: text/plain; charset=UTF-8告訴這樣的消息部分採用UTF-8,這是很好的郵件閱讀器,但是......什麼的$textContent變量包含?這是重要的一點。根據Content-Transfer-Encoding: 7bit,這是一個7位編碼,因此它不能是原始的UTF-8。但是,您並未使用任何用於電子郵件的常用7位編碼。否則,將會有(例如)Content-Transfer-Encoding: quoted-printable標題。

綜上所述,您需要:

  1. 有一個包含有效的UTF-8源字符串。
  2. 選擇一個編碼的轉移,如quoted_printable_encode()
  3. 添加一個標題以告訴您選擇了哪種傳輸編碼。

您也可以原樣發送原始UTF-8並設置Content-Transfer-Encoding: 8bit但我不會推薦它。您只需發送非常長的行就可能會破壞SMTP標準。此外,你不知道這將通過什麼樣的傳統程序。

電子郵件是難度比它看起來,這就是爲什麼你遲早最終使用第三方庫:PHP MailerSwift MailerPEAR Mail ...

+0

這個很難,因爲我繼承了一個定製的CMS,它不是很清楚,似乎與各種文件和庫鏈接 - 只是試圖破譯所有的未知數。如果我從頭開始寫作,我會更開心。 – mro

+0

我將7位編碼改爲8位編碼(編輯頂部) – mro

+0

我知道這可以通過大修來完成,但目前通常需要昨天修復字符! – mro

1

內容傳送編碼:7位

這是沒有意義的 - 有7位數據和一個8 +位表示之間不存在直接映射。您需要更改mime標題以說明您正在使用的編碼。

對於SMTP傳送編碼應該是一個7位ASCII字符集。要改變你的utf8數據,你需要對它進行編碼 - 常見的編碼是base64和引用的可打印的(PHP爲兩者提供編碼和解碼fns)。

爲什麼不直接使用一個很好的LIB像phpmailerswiftmailer

+0

嗨,這是一個我正在採取的方式(這個問題是語言字符不會顯示),並試圖不要太難過,所以希望我可以改變字符集。 – mro

+0

這是我在此使用的示例:<?php $ to ='[email protected]'; $ subject ='喚醒鮑勃!'; $ message ='yo,whassup?'; $ headers =「From:[email protected] \ r \ n」。 'X-Mailer:PHP /'。 phpversion()。 「\ r \ n」。 「MIME-Version:1.0 \ r \ n」。 「Content-Type:text/html; charset = utf-8 \ r \ n」。 「Content-Transfer-Encoding:8bit \ r \ n \ r \ n」; //發送 郵件($ to,$ subject,$ message,$ headers); ?> – mro