我使用西班牙語發送的電子郵件通過PHP郵件()發送,它們有口音和特殊字符(我將嘗試在此粘貼:á,í,é,ñ。 ..)。發送帶有國際口音和特殊字符的電子郵件
的電子郵件,我想我通過打印解決問題的HTML版本á
,é
...
不過,對於純文本版本,我想我不能把這些吧?
對於HTML和純文本版本,最好的做法是什麼? 後來,我可能不得不發送更復雜的語言,如希伯來文或中國的電子郵件...
謝謝!
我使用西班牙語發送的電子郵件通過PHP郵件()發送,它們有口音和特殊字符(我將嘗試在此粘貼:á,í,é,ñ。 ..)。發送帶有國際口音和特殊字符的電子郵件
的電子郵件,我想我通過打印解決問題的HTML版本á
,é
...
不過,對於純文本版本,我想我不能把這些吧?
對於HTML和純文本版本,最好的做法是什麼? 後來,我可能不得不發送更復雜的語言,如希伯來文或中國的電子郵件...
謝謝!
您需要使用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-Encoding
爲base64
,而使用base64_encode。
最後,如果你想在頭非ASCII字符(例如,在From
,To
或Subject
),有一個完全不同的語法:
Subject: =?utf-8?b?QW4gYS1hY3V0ZSBpcyDDoQ==?=
如果這一QW...==
混亂中間是UTF-8中的「An a-acute isá」的base64_encode
。
á,í,é,ñ等重音字符在大多數默認瀏覽器設置設置下都可以在純文本上使用。
亞洲人喜歡漢字通常會變成垃圾。
是的,純文本+ HTML是推薦的方式。
如果您的電子郵件內容編碼爲UTF-8,並且您將電子郵件作爲UTF-8發送,那麼您不應該在Html或Text部分中使用任何特殊的國際字符處理。
如何確保我的電子郵件正在以UTF-8格式發送? – 2009-11-12 01:03:53
'完全不同的語法'是RFC2047'B'編碼。通常,使用來自同一個RFC的'Q'編碼更好,因爲它通常更具可讀性(很像引用可打印)並且更短。 PHPMailer處理兩者,並且通常是一種更好的方式來整理你的編碼,而不是試圖從頭開始 - 這是庫的目的! – Synchro 2012-07-11 21:54:06