Outlook 亂碼問題


話說在論壇常常看到有人問到收到郵件亂碼,這個亂碼問題要配圖檔比較好說明。
說明之前先說,因為搞太多了,所以我自己有很多寄信收信的小工具,也可以當成是郵件軟體,以一個郵件軟體開發者的角度來說這件事,不要當成這是經驗談或偏方,有時在論壇上就有人要用經驗跟我揮,乾脆叫對方貼出信頭還比較快。
電子郵件從寄件者電腦郵件軟體輸出成專用的 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
Categories: Office | 21 則迴響

文章分頁導航

21 thoughts on “Outlook 亂碼問題

  1. 子璉

    1. 亂碼通常是上面講的,沒有設定外寄郵件編碼,可從信頭來判讀是否有設定。*.eml 用記事本打開,前面到空白行之前叫做 Mail Header (信頭) ,後面叫做 Mail Body (郵件本文) ,配合 MIME 格式,有時也稱 Message Header / Message Body 。
    2. 你的狀況可能是發信被中斷導致附加檔不完整,或是編碼錯誤導致信件被截斷,MIS 發信時副本給自己,檢查 Mail Server 上 Log 有無 Timeout (中斷) 、檢查郵件原始檔最後是否正常結束 (截斷)

  2. cathy

    感謝您的解說與分享,我被這個問題困擾很久了,但對於您的說明尚有不解的地方,我遇到的情形有二種:1. 大陸地區mail來的主旨都是亂碼。2. 收到大陸地區來的郵件附加excel檔,在我的電腦中打開是正常的,但經由我的電腦再轉寄給別人後,excel內的文字及表格全變成一堆英文字母了。請問以上二種情形要如何設定呢?

    Liked by 1 person

  3. wkevinst

    個人覺得是 microsoft 的問題,即便雙方都用 outlook 2007 也都設 utf8
    結果還是常常變亂碼,在 office2003 以前版本都沒有這現象,自從換了 2007~ 以後版本
    outlook 出現亂碼就變成家常便飯。

    • eMail 的標準是依據 RFC 文件的規範,我只能說這樣的想像力會讓人誤會沒讀書…
      要推論一個傷害性的定論時,要有依據,而不是以為是。

  4. wkevinst

    因為我實在無法解釋兩邊都為 outlook 2007 且都設為 utf8或者兩方都為 big5 時寄信或回信對方收到的居然都是亂碼,還要手動切換編碼。這對 user 來講是無法解釋的。
    事實上網路上並不只我覺得 outlook 2007 以後版本亂碼次數變多,那這一堆人是否都沒讀書勒??? 事實上 outlook 2007 以後版本出現亂碼機率比以前版本來的高是不爭的事實。

    Liked by 1 person

  5. V.C

    都設定了, 還是解決不了, 實在令人頭疼!
    目前遇到是ipad寄來的信會有這問題, 但mac寄來卻又不會, 整個不知所已!

  6. 上面說過,這是寄信端問題。
    iPad 是否有可設定的部分,請洽蘋果客服部門,或是你送我一台讓我試看看。

  7. jmc

    你好 已照你所言 雙方都已更改為utf-8 當下也測試 ok
    但隔天又恢復亂碼(英文及數字)
    謝謝

  8. 請參考前面的說明,檢查信頭。
    收件端是否設定不受影響,收件端會依據信頭解碼,會亂碼就是沒正確設定,且寄件端與收件端預設語系不同造成。

  9. Luke

    您好,我使用Outlook 2010,
    一封主旨正常顯示中文的mail,轉寄給自己和他人,主旨都變成亂碼。又新增一封信,主旨打中文,寄給自己,主旨變成亂碼,但兩者內容都正常顯示。
    請問大概是什麼原因?

  10. 主旨亂碼依據上面說明,檢查內嵌編碼

  11. Anderson Hsu

    您好:
    如果郵件的內容中,亂碼是在回信的過程中來產生 (之前的顯示正常,這幾天顯示變亂碼),是否有辦法解讀這段亂碼的內容呢?謝謝 (https://social.msdn.microsoft.com/Forums/zh-TW/644eaa8b-dbc1-4ab9-b419-490de6b3dfd5)

    • 論壇內的討論請在論壇內解決,在別人部落格貼是很不禮貌的。
      你論壇文中並沒有提到原先正常,所以會對相關參與者產生誤導,所以可能衍生完全錯誤的討論方向。
      這幾天需要明確定義,如果是 Windows Update 之後,可以先移除本月這個更新:KB3097877
      目前有一些說法會影響到 Office 或 Win7 開機。
      若是更新前,可以試著用 scanpst.exe 修復,另外檢查是否安全性中設置純文字郵件,若為純文字郵件且沒有多個 MIME 部分, Mail Body 內只有 HTML 內容,有可能出現此問題。
      後續不在部落格回覆。

      • Anderson Hsu

        了解,此部分將修正 (POST在部落格的部分) 。感謝

  12. 您好 目前遇到以下問題
    於 WINXP 使用OUTLOOK 2003 可以正常收信
    於WIN7 使用OUTLOOK 2003 SP3 有部分收信異常
    同一寄件者所寄送之MAIL,有一封可以正常開啟
    另一封則是純文字(原始碼)的方式開啟
    已確認寄信者使用UTF-8編碼寄信
    於WEBMAIL可正常收信

    請問還有哪個地方需要修改,才能讓OUTLOOK2003
    收到HTML的MAIL而非純文字嗎
    附註:已有設定已HTML方式收信了

    謝謝

  13. Outlook 基於安全考量,允許使用者設定純文字讀信,請在收信端檢查。
    此問題為 Outlook client 端操作問題,並非亂碼問題,請在微軟論壇提問,不要在個人網誌亂入不相關的問題。

  14. 我的Outlook也是有碰到寄出的信客戶變亂碼的問題, 但把[喜好的外寄郵件編碼] 選擇 [Unicode (UTF-8)]並沒有解決亂碼, 後來發現還要取消勾選[自動選取外寄郵件的編碼]客戶收到才不會變亂碼 , 剛好跟版主這的截圖中是要勾選[自動選取外寄郵件的編碼] 相反, 不知道為什麼在[自動選取外寄郵件的編碼]這個選項剛好是相反的?

  15. 引用通告: [Outlook] iOS 寄來的信件亂碼 | 鄭子璉

發表留言

在WordPress.com寫網誌.