首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

解決 UTF-8 編碼與 JMail 組件發送郵件亂碼問題:伺服器區域設定關鍵

     編輯:關於ASP.NET

開發多語言網站採用 UTF-8 編碼時,使用 JMail 發送郵件遇到亂碼問題。本文記錄從程式碼排查到伺服器層級解決的完整過程。

現象觀察

  • 本機開發環境 (中文 Windows):Outlook/Foxmail 收信正常,Webmail 顯示亂碼
  • 測試伺服器 (英文 Windows):Foxmail 收信仍顯示亂碼 (問號亂碼)
  • 程式碼邏輯無誤,JMail 版本更新後問題依舊

關鍵突破:發送前內容已亂碼

在郵件發送前輸出 JMail 指派的內容,發現內容在指派給 JMail 時已經亂碼,問題非 JMail 組件本身,而是執行環境編碼處理差異。

根本原因:非 Unicode 程式語言設定

環境作業系統非 Unicode 程式語言結果
本機中文版 Windows中文 (預設)JMail 內部編碼正確
伺服器英文版 Windows英文 (預設)JMail 內部編碼錯誤

JMail 內部處理字串時,依賴系統預設的非 Unicode 程式代碼頁 (ACP)。英文系統預設代碼頁為 1252 (西歐語系),無法正確處理中文字元,導致 UTF-8 字串在傳遞給 JMail 時損壞。

解決方案

  1. 開啟「控制台」→「區域與語言選項」→「進階」頁籤
  2. 「非 Unicode 程式的語言」選擇 中文 (簡體/繁體)
  3. 重新啟動伺服器

驗證結果

重啟後,Foxmail/Outlook/Webmail 皆正常顯示中文郵件內容,問題徹底解決。

補充建議

  • 程式碼層面:明確指定 JMail.Charset = "UTF-8"、JMail.Encoding = "Base64"
  • 郵件主旨/內容皆需 UTF-8 編碼
  • 考慮改用 System.Net.Mail (內建) 替代 JMail,減少 COM 元件相依

此案例揭示:元件行為可能受作業系統區域設定影響,排查編碼問題時需同時檢視應用程式與系統層級設定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved