2009-11-12 46 views
6

我使用西班牙語發送的電子郵件通過PHP郵件()發送,它們有口音和特殊字符(我將嘗試在此粘貼:á,í,é,ñ。 ..)。發送帶有國際口音和特殊字符的電子郵件

的電子郵件,我想我通過打印解決問題的HTML版本áé ...

不過,對於純文本版本,我想我不能把這些吧?

對於HTML和純文本版本,最好的做法是什麼? 後來,我可能不得不發送更復雜的語言,如希伯來文或中國的電子郵件...

謝謝!

回答

23

您需要使用MIME。添加郵件頭:

MIME-Version: 1.0 
Content-Type: text/plain;charset=utf-8 

(如果您已經使用MIME multipart/alternative把HTML和文本在同一個郵件,你把Content-Type: text/plain;charset=utf-8上的文字部分的子報頭代替。)

這是假設您將發送您的「國際」字符的編碼是UTF-8。如果您希望滿足多個國家/地區的需求,UTF-8是在整個應用程序中使用的唯一合理的編碼選擇,但如果您還沒有真正考慮過這一點,那麼您的站點可能默認爲西歐編碼。檢查中文字符之類的東西在您的網站和數據庫中正常工作,然後再擔心郵件中的漢字。

脫軌:有些地區以UTF-8發送郵件並不是最有效的方式。我不瞭解中國,但在日本仍然有一些倒退和荒謬的郵件系統(尤其是webmail)無法應對Unicode,必須給予特定於區域的編碼,例如Shift-JIS。如果您專注於這些市場,則最終必須使用iconv來創建郵件的特定編碼版本。不愉快。

現在,由於許多郵件服務器無法處理郵件正文中的非ASCII字符,因此您必須對它們進行編碼。你可以選擇引用可打印或base64爲此;引用可打印一般較小,對於太有ASCII字符的內容更具可讀性:

Content-Type: text/plain;charset=utf-8 
Content-Transfer-Encoding: quoted-printable 

Hello! An a-acute is =C3=A1 

以這種格式編碼的功能是quoted_printable_encode。但是,你需要一個合理的最新的PHP來獲得該功能;如果你沒有它,你可以設置Content-Transfer-Encodingbase64,而使用base64_encode

最後,如果你想在頭非ASCII字符(例如,在FromToSubject),有一個完全不同的語法:

Subject: =?utf-8?b?QW4gYS1hY3V0ZSBpcyDDoQ==?= 

如果這一QW...==混亂中間是UTF-8中的「An a-acute isá」的base64_encode

+0

'完全不同的語法'是RFC2047'B'編碼。通常,使用來自同一個RFC的'Q'編碼更好,因爲它通常更具可讀性(很像引用可打印)並且更短。 PHPMailer處理兩者,並且通常是一種更好的方式來整理你的編碼,而不是試圖從頭開始 - 這是庫的目的! – Synchro 2012-07-11 21:54:06

1

á,í,é,ñ等重音字符在大多數默認瀏覽器設置設置下都可以在純文本上使用。

亞洲人喜歡漢字通常會變成垃圾。

是的,純文本+ HTML是推薦的方式。

1

如果您的電子郵件內容編碼爲UTF-8,並且您將電子郵件作爲UTF-8發送,那麼您不應該在Html或Text部分中使用任何特殊的國際字符處理。

+3

如何確保我的電子郵件正在以UTF-8格式發送? – 2009-11-12 01:03:53

相關問題