接到用戶反應在p1上面的webmail無法正常瀏覽html格式信件,經測試確實存在此問題,所以針對問題尋找發生原因,發現到只要在郵件的表頭部份沒有加上”MIME-VERSION : 1.0”,這樣的html郵件便會無法正常顯示,因此針對郵件的編碼進行了相關的了解並分享。
在原來e-mail的格式中只能傳送ASCII的文字資訊,ASCII為7位元的代碼,因此在傳送中文字等等的8位元字符便會出現問題,也因此需要將8位元字符集利用編碼的方式編成7位元的ASCII碼,以解決在傳送中文信件時出現的編碼混亂問題。至於編碼的方式大體來說有UU、MIME、BINHEX三種編碼標準
一、UU 編碼(unix-to-unix encoding)
uuencode和uudecode原來是早期unix系統使用的編解碼程式,其內部所用演算法為Base64,後來被改寫成為在DOS下運行的可執行程式。
UU 使用方法為:在進行郵件發送前,在dos方式下先用 uuencode.exe程式將原文件編碼成ASCII檔,然後再進行發送。收件人在接到後再用uudecode.exe程式將檔還原。
這是 DOS 下的編碼程式。在windows下類似的程式還有wincode和winzip等, wincode的使用原理同DOS下的uuencode、uudecode相同,只是利用了 windows 的介面,從而使操作更為簡便。wincode程式除支援 UU 編碼外,同時支援 mime,Binhex等編碼格式,應用範圍頗為廣泛。
UU 編碼並非只能對中文進行編碼,任何你要寄出的檔包括 .exe 等二進位檔都可按照編碼——> 發送——> 收信——> 解碼還原的步驟進行傳送。
二、MIME(Multipurpose Internet Mail Extention)標準的編碼
UU 編碼解決了 E-MAIL 只能傳送 ASCII 檔的問題,但我們可以從編解碼的過程看出其運用並不很方便,因而隨後又發展出一種新的編碼標準即 MIME( Multipurpose Internet Mail Extention )譯作“多媒體郵件傳送模式”。顧名思義,這種編碼標準支援傳送多媒體檔,可在一封電子郵件中附加各種格式的檔一起發送。
其實 MIME 定義的是一種編碼規格,亦或可以說是一類編碼的統稱,能夠符合 MIME 標準的編碼方式並非一種,而只要符合 MIME 規格便可順利傳送,在 MIME 定義下有兩種編碼方式 Base64 和 QP ( Quote-Printable ),QP 的規則是對資料中的 7 位元無須重複編碼,僅將 8 位元資料轉成 7 位元, QP 編碼適用於非 ASCII 碼的文字內容,例如我們的中文檔。而Base64 的規則是將整個檔重新編碼成 7 位元,通常適用於傳送二進位檔。
採用 MIME 標準編碼的 E-MAIL 軟體一般能自動判別你的郵件是採用何種編碼,然後自動選擇用 QP 或 Base64 來解碼。
MIME 標準現已成為 Internet 電子郵件編碼的主流。它的好處是以物體作為包裝方式,可將多種不同檔一起打包後傳送。發信人只要將要發的檔選好,它在傳送時即時編碼,收信人在收信時同時也是即時解碼還原。先決條件是雙方的郵件軟體都必須具有這項功能。使用這種方式發、收信雙方所要做的工作非常簡單,只須選定——> 寄出,其他的全部由電子郵件軟體自動完成。由於 MIME 的方便、可靠性,愈來愈多的電子郵件採用這種方式,我們最常見的 Netcape Mail , Internet Mail 等都是採用 MIME 方式。
三、BINHEX 編碼較少見,主要用在 MAC 機上, PC 機上很少見,在此不做講解
UUENCODE 編碼判斷及解決
由於 UUENCODE 內部所用演算法為 Base64 ,其格式為:
begin 644 gx.zip Mig)0;….
…
end
其格式特徵為在亂碼之前會有“ begin xxx ”後緊跟被編碼的原始檔案名稱,然後跟編碼信件內容,在最後一行為“ end ”。
具體方法有:
(1)、將 Uuencode “亂碼”郵件轉寄到自己的郵箱中,再使用能夠支援UU 解碼的電子郵件接收程式 ( 如 Eudora 、 OutLook Express 等)來接收該郵件。
(2)、通過剪輯板將 Uuencode “亂碼”存入文字檔案,改檔案名尾碼為UUE ,然後使用 Winzip 解碼。
(3)、將 Uuencode “亂碼”存入一個檔,然後在 DOS 下用 uudecode.exe 程式將檔解碼。
(4)、將 Uuencode “亂碼”存入一個檔,然後在 Windows 下用 Wincode 解碼。
Wincode 除支援 UU 編碼外也支援 MIME、Binhex 等編碼格式。
MIME 方式編碼判斷及亂碼解決方法
(一)、 Base64 encode 編碼判斷
Base64 大體格式為:
MIME-Version:1.0
Content-type:text/plain;Charset=』us-ascii』
Content-transfer-encoding;base64
….
在亂碼前一般有以下幾部分“ 信頭”:Content – type(內容及類型),Charset(字元集)及Content-Transfer-encoding(內容傳輸編碼方式)從以上資訊非常好判斷,解決方法有:
(1)、將 Base64 encode “亂碼”郵件存成一個文字檔案,改檔案名尾碼為 .UUE,然後使用 Winzip 解碼。
(2)、將 Base64 encode “亂碼”郵件存成一個檔,將檔尾碼改為 .EML,由 OutLook Express 打開,就可以自動解碼。
(二)、QP 編碼判斷
QP 編碼大體格式如下:
=A1A=B1Z=A6N=A1I=AT=DA
….
採用 QP 編碼的信件也很容易判斷,只要亂碼內容有很多符號“= ”就可判斷為 QP 編碼,QP 亂碼解決方法有:
(1)、將 QP-encode “亂碼”郵件轉寄到自己的郵箱中,然後用支援 QP 解碼的電子郵件接收程式(如 Netscape mail、Eudora、Out Look Express、Becky 等)來接收該郵件。
(2)、使用Winzip對Quoted-Printable解碼。必須注意:
(a) 在郵件信頭中檢查、添加這樣兩行:
Mime-Version : 1.0
Content-Transfer-Encoding: quoted-printable ;
(b) 信頭中間不要空行,信頭和信體之間要有一個空行。改尾碼名為UUE,即可雙擊啟動Winzip得到解碼。
由於一般人使用outlook/outlook express收發信件較多,而中文地區的outlook中針對郵件編碼的部分已經預先設定好編碼方式,因此若信件表頭中沒有指定編碼方式的信件仍可正常解碼出來看見正確的中文字,也因此有相當多的郵件因此在表頭不遵循規範指定編碼方式,才會產生在plesk的webmail中無法正常顯示html格式的信件。