話說在論壇常常看到有人問到收到郵件亂碼,這個亂碼問題要配圖檔比較好說明。
說明之前先說,因為搞太多了,所以我自己有很多寄信收信的小工具,也可以當成是郵件軟體,以一個郵件軟體開發者的角度來說這件事,不要當成這是經驗談或偏方,有時在論壇上就有人要用經驗跟我揮,乾脆叫對方貼出信頭還比較快。
電子郵件從寄件者電腦郵件軟體輸出成專用的 MIME 郵件後,一路使用 SMTP 遞送,經過寄件伺服器 [> 叢集可能還會有對外主站] > 收件伺服器 [> 叢集可能還會有對內分站] 保留在收件伺服器上。
收件者再以郵件軟體使用 POP3 到收件伺服器上下傳接收。
註:中括號表示可有可無
每經過一台 SMTP 轉送,包含收件伺服器分站,就會在信件最上方加上經過伺服器的記錄,所以若要追蹤各伺服器的時間、路徑,就可以從信頭來看,越上方的越後經過,越靠近收信者。
當然倒回推的時候,若是中間不是經過大型可信賴的郵件伺服器,可能會被偽造,比如說有些大企業內部可能有多個 Mail Server ,可能路徑是:
部門 Mail Server > 公司 Mail Server > 轉信站 (ISP 業者) …
而一般使用者可能直接透過 ISP 業者寄出,所以一般使用者若知道某些大企業的信頭 (Mail Header) 找出路徑時,就可以仿造透過程式方式送出不存在的 Mail 記錄,佯裝是部門 Mail Server 寄出。
所以信頭很多不可靠,但是反過來說,一封郵件能不能正確的解讀,就要看信頭。
下面這張圖是一封信頭的結構圖,這是屬於 MIME 格式,詳情可參考 RFC1521 ,這種格式可以內崁,也就是一封郵件裡面可能還有多封郵件或檔案,比如說附加檔就是以 MIME 格式崁入在信件的 MIME 格式中。
而一封郵件是否能正確解碼,就看郵件是否有崁入編碼。
早期郵件通常是本國寄來寄去,但隨著國際化,跨國郵件越來越多,所以編碼的問題也越加重要,但這類軟體多半是英語系國家開發,所以包含 Outlook Express / Windows Live Mail / Outlook 的預設值,都是不寫入國際編碼資訊,而收信時若信頭沒有標記國際編碼時,就會依據控制台地區語言來假定這封郵件的編碼,當寄件者使用多國語言時,就容易發生亂碼。
最簡單的方法,就是請寄件者在 Outlook 外寄郵件編碼中,設定為 utf8 ,這邊不是指單封郵件的編碼,而是整套軟體的設定。整套軟體的設定會套用在整封郵件上,信件的編碼只會套用在 Mail Body 上,並不會影響到 Mail Header ,也就是說整封郵件的 MIME 編碼方式可以與內崁的附件採用不同的編碼方式,比如說你內文要用簡中,但你不需要把 Outlook 的設定變更為簡中,只需要把該封郵件的編碼變更為簡中即可。
特別的狀況:
假設簡中寄件者沒設定外寄的郵件編碼,會以 GB 編碼寄出,這個編碼相容 ANSI ,繁中收件者用 ANSI 相容的 Big5 就會解出一堆亂碼,但若使用者有安裝 Unicode 補完計畫,就會因為 ANSI 轉 big5 映射到 Unicode 後,顯示出部分正確的編碼,不過要注意,這只是剛剛好,不是通解。
正確的方法簡中寄件者發出郵件經過 Unicode 適用於網路傳輸的 utf8 邊碼寄送,到了使用者電腦就會用 utf8 解整封郵件,再依據內崁的內容顯示出簡體中文。
注意的部分:
Win9x(95/98/SE/Me) 是 ANSI Windows ,WinNT(2k/XP/2003/Vista/2008/7) 是 Unicode Windows ,Outlook 2002 以前是 ANSI Windows (所以才能安裝在 WinMe 以前) ,Outlook 2003 以後是 Unicode Windows ,只有 Outlook 2003 與 Windows 2000 以後才是純 Unicode 環境,能把亂碼問題減少到最少,此外若碰到掉字,可能是對方使用到 Unicode 3.1 以後的字元,Win2k/XP/2003 是 Unicode 2.0 ,WinVista/2008/7 是 Unicode 5.0 ,若使用到 Unicode 5.0 的字元,在舊版的環境下會無法顯示,哪些是 Unicode 3.1/5.0 的字元呢?先前這篇有,新注音輸入法中不是黑色的都是:
設定外寄郵件編碼不等於單封郵件的編碼,為了方便識別起見,將參考圖片補充如下:
Outlook 2003
Outlook 2007
Outlook 2010
Outlook Express 6.0
Windows Live Mail
1. 亂碼通常是上面講的,沒有設定外寄郵件編碼,可從信頭來判讀是否有設定。*.eml 用記事本打開,前面到空白行之前叫做 Mail Header (信頭) ,後面叫做 Mail Body (郵件本文) ,配合 MIME 格式,有時也稱 Message Header / Message Body 。
2. 你的狀況可能是發信被中斷導致附加檔不完整,或是編碼錯誤導致信件被截斷,MIS 發信時副本給自己,檢查 Mail Server 上 Log 有無 Timeout (中斷) 、檢查郵件原始檔最後是否正常結束 (截斷)
讚讚
感謝您的解說與分享,我被這個問題困擾很久了,但對於您的說明尚有不解的地方,我遇到的情形有二種:1. 大陸地區mail來的主旨都是亂碼。2. 收到大陸地區來的郵件附加excel檔,在我的電腦中打開是正常的,但經由我的電腦再轉寄給別人後,excel內的文字及表格全變成一堆英文字母了。請問以上二種情形要如何設定呢?
讚Liked by 1 person
另外關於信件的相關問題這兩篇也看一下:
[Outlook]啟用紀錄 追蹤收發郵件的問題 https://tlcheng.wordpress.com/2010/05/23/outlook%e5%95%9f%e7%94%a8%e7%b4%80%e9%8c%84-%e8%bf%bd%e8%b9%a4%e6%94%b6%e7%99%bc%e9%83%b5%e4%bb%b6%e7%9a%84%e5%95%8f%e9%a1%8c/
特例:Outlook / Live Mail 之非戰之罪:附件打不開… https://tlcheng.wordpress.com/2010/05/25/%e7%89%b9%e4%be%8b%ef%bc%9aoutlook-live-mail-%e4%b9%8b%e9%9d%9e%e6%88%b0%e4%b9%8b%e7%bd%aa%ef%bc%9a%e9%99%84%e4%bb%b6%e6%89%93%e4%b8%8d%e9%96%8b/
讚讚
個人覺得是 microsoft 的問題,即便雙方都用 outlook 2007 也都設 utf8
結果還是常常變亂碼,在 office2003 以前版本都沒有這現象,自從換了 2007~ 以後版本
outlook 出現亂碼就變成家常便飯。
讚讚
eMail 的標準是依據 RFC 文件的規範,我只能說這樣的想像力會讓人誤會沒讀書…
要推論一個傷害性的定論時,要有依據,而不是以為是。
讚讚
因為我實在無法解釋兩邊都為 outlook 2007 且都設為 utf8或者兩方都為 big5 時寄信或回信對方收到的居然都是亂碼,還要手動切換編碼。這對 user 來講是無法解釋的。
事實上網路上並不只我覺得 outlook 2007 以後版本亂碼次數變多,那這一堆人是否都沒讀書勒??? 事實上 outlook 2007 以後版本出現亂碼機率比以前版本來的高是不爭的事實。
讚Liked by 1 person
沒錯,念過 RFC MIME 格式的有幾人會主觀認為是 Outlook 的問題或是說收件軟體的問題?
判斷須有依據。
在伺服器上保留郵件備份,發生亂碼信用 Windows Live Mail 收下來,另存為 .eml 後,用記事本打開,內容貼到下面網址,或是上傳 skydrive 後,網址貼到下面網址,會有念過 RFC MIME 格式的網友可以協助解讀。
http://social.technet.microsoft.com/Forums/zh-TW/officezhcht/threads
你也可以看這篇,讓 Outlook 2007 保留原始郵件:
https://tlcheng.wordpress.com/2010/05/23/outlook%e8%ae%93%e4%bf%a1%e4%bb%b6%e8%83%bd%e4%bf%9d%e5%ad%98%e5%ae%8c%e6%95%b4%e5%8e%9f%e5%a7%8b%e5%85%a7%e5%ae%b9/
如果你念過 RFC MIME ,你還會碰到很多是防蠕蟲軟體亂搞。
例如這篇:
https://tlcheng.wordpress.com/2010/05/25/%e7%89%b9%e4%be%8b%ef%bc%9aoutlook-live-mail-%e4%b9%8b%e9%9d%9e%e6%88%b0%e4%b9%8b%e7%bd%aa%ef%bc%9a%e9%99%84%e4%bb%b6%e6%89%93%e4%b8%8d%e9%96%8b/
讚讚
都設定了, 還是解決不了, 實在令人頭疼!
目前遇到是ipad寄來的信會有這問題, 但mac寄來卻又不會, 整個不知所已!
讚讚
上面說過,這是寄信端問題。
iPad 是否有可設定的部分,請洽蘋果客服部門,或是你送我一台讓我試看看。
讚讚
你好 已照你所言 雙方都已更改為utf-8 當下也測試 ok
但隔天又恢復亂碼(英文及數字)
謝謝
讚讚
請參考前面的說明,檢查信頭。
收件端是否設定不受影響,收件端會依據信頭解碼,會亂碼就是沒正確設定,且寄件端與收件端預設語系不同造成。
讚讚
您好,我使用Outlook 2010,
一封主旨正常顯示中文的mail,轉寄給自己和他人,主旨都變成亂碼。又新增一封信,主旨打中文,寄給自己,主旨變成亂碼,但兩者內容都正常顯示。
請問大概是什麼原因?
讚讚
主旨亂碼依據上面說明,檢查內嵌編碼
讚讚
您好:
如果郵件的內容中,亂碼是在回信的過程中來產生 (之前的顯示正常,這幾天顯示變亂碼),是否有辦法解讀這段亂碼的內容呢?謝謝 (https://social.msdn.microsoft.com/Forums/zh-TW/644eaa8b-dbc1-4ab9-b419-490de6b3dfd5)
讚讚
論壇內的討論請在論壇內解決,在別人部落格貼是很不禮貌的。
你論壇文中並沒有提到原先正常,所以會對相關參與者產生誤導,所以可能衍生完全錯誤的討論方向。
這幾天需要明確定義,如果是 Windows Update 之後,可以先移除本月這個更新:KB3097877
目前有一些說法會影響到 Office 或 Win7 開機。
若是更新前,可以試著用 scanpst.exe 修復,另外檢查是否安全性中設置純文字郵件,若為純文字郵件且沒有多個 MIME 部分, Mail Body 內只有 HTML 內容,有可能出現此問題。
後續不在部落格回覆。
讚讚
了解,此部分將修正 (POST在部落格的部分) 。感謝
讚讚
您好 目前遇到以下問題
於 WINXP 使用OUTLOOK 2003 可以正常收信
於WIN7 使用OUTLOOK 2003 SP3 有部分收信異常
同一寄件者所寄送之MAIL,有一封可以正常開啟
另一封則是純文字(原始碼)的方式開啟
已確認寄信者使用UTF-8編碼寄信
於WEBMAIL可正常收信
請問還有哪個地方需要修改,才能讓OUTLOOK2003
收到HTML的MAIL而非純文字嗎
附註:已有設定已HTML方式收信了
謝謝
讚讚
Outlook 基於安全考量,允許使用者設定純文字讀信,請在收信端檢查。
此問題為 Outlook client 端操作問題,並非亂碼問題,請在微軟論壇提問,不要在個人網誌亂入不相關的問題。
讚讚
我的Outlook也是有碰到寄出的信客戶變亂碼的問題, 但把[喜好的外寄郵件編碼] 選擇 [Unicode (UTF-8)]並沒有解決亂碼, 後來發現還要取消勾選[自動選取外寄郵件的編碼]客戶收到才不會變亂碼 , 剛好跟版主這的截圖中是要勾選[自動選取外寄郵件的編碼] 相反, 不知道為什麼在[自動選取外寄郵件的編碼]這個選項剛好是相反的?
讚讚
加上外寄郵件編碼設定,是屬於 RFC 國際標準規範的一部分。
所以有兩種可能:
1. 對方的收信軟體不支援此規範。
2. 規範的編碼內容,在寄送過程中被移除。
確認對方收信軟體跟過程,副本寄給自己,從自己的副本與對方收到的郵件比對。
通常 1 的機率稍低,2 的機率比較大,如果對方是 Apple ,那可能是 1 的關係。
例如這篇,屬於 2 ,是被防毒軟體移除:
https://tlcheng.wordpress.com/2010/05/25/%e7%89%b9%e4%be%8b%ef%bc%9aoutlook-live-mail-%e4%b9%8b%e9%9d%9e%e6%88%b0%e4%b9%8b%e7%bd%aa%ef%bc%9a%e9%99%84%e4%bb%b6%e6%89%93%e4%b8%8d%e9%96%8b/
讚讚
引用通告: [Outlook] iOS 寄來的信件亂碼 | 鄭子璉