開發多語言網站採用 UTF-8 編碼時,使用 JMail 發送郵件遇到亂碼問題。本文記錄從程式碼排查到伺服器層級解決的完整過程。
在郵件發送前輸出 JMail 指派的內容,發現內容在指派給 JMail 時已經亂碼,問題非 JMail 組件本身,而是執行環境編碼處理差異。
| 環境 | 作業系統 | 非 Unicode 程式語言 | 結果 |
|---|---|---|---|
| 本機 | 中文版 Windows | 中文 (預設) | JMail 內部編碼正確 |
| 伺服器 | 英文版 Windows | 英文 (預設) | JMail 內部編碼錯誤 |
JMail 內部處理字串時,依賴系統預設的非 Unicode 程式代碼頁 (ACP)。英文系統預設代碼頁為 1252 (西歐語系),無法正確處理中文字元,導致 UTF-8 字串在傳遞給 JMail 時損壞。
重啟後,Foxmail/Outlook/Webmail 皆正常顯示中文郵件內容,問題徹底解決。
JMail.Charset = "UTF-8"、JMail.Encoding = "Base64"System.Net.Mail (內建) 替代 JMail,減少 COM 元件相依此案例揭示:元件行為可能受作業系統區域設定影響,排查編碼問題時需同時檢視應用程式與系統層級設定。