1. 程式人生 > >JavaMail之Subject亂碼解決之道

JavaMail之Subject亂碼解決之道

同學做的郵件同步系統 出了點小問題,發現用JavaMail獲得的Subject,發信人,收信人等出現亂碼。開啟eml檢視時,發現郵件內容是這樣的:

Received:from mail.miibeian.gov.cn (unknown [211.94.161.4])
    by mx22 (Coremail) with SMTP id wKjR3rAbKgURz1pFnD6uBA==.49280S2;
    Wed, 15 Nov 2006 16:25:54 +0800 (CST)
Received:from nisac ([211.94.161.58])
    (authenticated)
    by mail.miibeian.gov.cn (8.11.6/8.11.6) with ESMTP id kAF9BBR27094
    for 
<fzg502@163.com>; Wed, 15 Nov 2006 17:11:12 +0800
Message-Id:
<200611150911[email protected]>
From:[email protected]
To:[email protected]
Subject:=?gb2312?B?KMjw0MfM4cq+LbTL08q8/r/JxNzKx8Csu/jTyrz+KQ==?=ICP備案網站郵件驗證碼(註冊使用者:pianoforever)
Date:2006-11-15 16:40:08
MIME-Version:1.0
Content-Type:multipart/mixed;
    boundary="BAABD165.BAABD165"
X-Brightmail-Tracker:AAAAAQAAAAQ=


--BAABD165.BAABD165
Content-Type: text/plain;
    charset="gb2312"
Content-Transfer-Encoding: 8bit

尊敬的使用者,您的ICP備案資訊註冊成功!使用者名稱:pianoforever,郵件驗證碼是:13738096,手機驗證碼已傳送到您註冊的手機中。請登入ICP備案網站http://www.miibeian.gov.cn,登入後分別輸入手機驗證碼和郵件驗證碼,通過驗證後就可以開展各項工作了。


--BAABD165.BAABD165
Content-Type: text/plain;
    charset="gb2312"
Content-Transfer-Encoding: 8bit

傳送時間:Wednesday, November 15, 2006 16:31:40

--BAABD165.BAABD165--

請看Subject的內容,格式是這樣的 =?格式xx一段編碼xxx?=一段文字

正確解釋的主題是:(瑞星提示-此郵件可能是垃圾郵件)ICP備案網站郵件驗證碼(註冊使用者:pianoforever)

但JavaMail的MimeMessage.getSubject()得到的是:

(瑞星提示-此郵件可能是垃圾郵件)ICPxxxx亂碼xxpianoforever)

可以看到是前半部分解碼正確,而後面半部分解碼錯誤,查找了一下沒發現MimeMessage提供設定解碼格式,於是測試了一下,發現MimeMessage用了ISO8859_1解碼!!!又不允許更改,我倒。。。Class.getResourcesAsStream又是這樣,sun的國際化真是太國際了!

於是,想到一個辦法,獲得Subject等資訊,手動寫解碼部分:

//.........mimeMessage為MimeMessage的instance
String subject ="";
try{
    String[] strs 
= mimeMessage.getHeader("Subject");
    
for (String str : strs) {//一般主題不會有多個吧?其它屬性自己處理啦
        subject =new String(str.getBytes("ISO8859_1"), "GBK");
    }

    subject 
= MimeUtility.decodeText(subject);//base64解碼
}
catch (Exception exce) {
}

//.........

用這種方法可以很好的解決了中文亂碼問題,其實很多東西不想想像中那麼難,只是沒有邁出那一步。(我也是因為這個問題才接觸到JavaMail,它是什麼樣東西也不大清楚,但字元編碼這東西是不變的,有亂碼了就一定是哪裡解碼錯誤了)

ps:百度搜了一下,找了N多網頁,但翻了一下,沒發現有說這個問題的,希望我的一個解決辦法可以幫到有需要的人

相關推薦

JavaMailSubject亂碼解決

同學做的郵件同步系統 出了點小問題,發現用JavaMail獲得的Subject,發信人,收信人等出現亂碼。開啟eml檢視時,發現郵件內容是這樣的: Received:from mail.miibeian.gov.cn (unknown [211.94.161.4])   

java中文亂碼解決(三)-----編碼詳情:偉大的創想---Unicode編碼

隨著計算機的發展、普及,世界各國為了適應本國的語言和字元都會自己設計一套自己的編碼風格,正是由於這種亂,導致存在很多種編碼方式,以至於同一個二進位制數字可能會被解釋成不同的符號。為了解決這種不相容的問題

get請求,中文亂碼解決 百度如何正確獲取中文請求引數(我猜測)

url查詢串不直接支援中文等非ASCII碼錶符號的傳輸,需要經過瀏覽器採取一種編碼方案將中文字元編碼為可用於url傳輸的符號(也就是ASCII碼的符號)。除這種類似中文查詢串的情況外,url中有特殊用途的符號,例如%,@, :, &,#,?等也不能直接傳輸,同樣需

JpGraph使用詳解中文亂碼解決方法

JpGraph為什麼會出現中文亂碼 在JpGraph中預設是要把字串轉成utf8的,但是如果你的檔案本身就是utf8的,並且要用中文字型,它還會轉一遍,結果多轉了一次,就會出現亂碼。如圖所示 解決亂碼: 將 //設定圖表的標題字型、大小 $gra

JavaMailSubject亂碼問題

我的linux平臺編碼方式是utf-8,在用javamail傳送郵件的時候,會遇到標題亂碼的問題。 解決辦法是: 在emial.setSubject("傳送標題"); 之前要設定System.setProperty("mail.mime.charset","UTF-8");

navicat for mysql學習:navicat for mysql 顯示中文亂碼解決辦法

在“連線屬性”的設定中,高階-“使用mysql字符集”去掉鉤,並且將編碼改為10008-GB2312. 然後進入navicat的控制檯後,show variables like 'char%';命令後如下: +--------------------------+-----------------------

js url傳值中文亂碼解決_javascript技巧

url=encodeURI(encodeURI(url)); //用了2次encodeURI 測試成功,第一次轉換沒有嘗試, 處理方法一。 js 程式程式碼:url=encodeURI(url);注意是整個URL 伺服器端的程式碼:String linename = new

Jmeter中Sampler響應結果亂碼問題解決

先看現象,響應資料出現亂碼。 問題分析: 當響應內容沒有設定編碼時,jmeter會按照jmeter.properties檔案中設定的編碼進行解碼。預設的編碼為ISO-8859-1,所以在解析中文時出錯。 The encoding to be use

雲計算:為什麽說存儲是雲計算發展瓶頸之一?虛擬化是解決

雲計算 虛擬機 固態硬盤 數據庫 成本 共享存儲模型文件/記錄層(File/Record Layer)提供存儲資源訪問方法,包括:文件系統,數據庫,緩存等將用戶視圖的數據單元(文件/記錄/對象)保存到存儲空間,並記錄映射關系,負責維護命名空間、存儲空間分配性能優化,分布式系統集群管理與控制

玩轉webajax(一)---使用表單的serialize()方法中文亂碼解決

ack track 獲取 enc uri clas serialize post class 有時候我們須要使用ajax提交去提交form的值,這樣就須要使用serialize()去獲取form的值。但這樣獲取的值假設有中文

授人以魚不如授人以漁——CPU漏洞的Symantec解決

感染 內存 manage define 如何 -s 彈性 加固 images 授人以魚不如授人以漁——CPU漏洞的Symantec解決之道 前言1月4日,國外安全研究機構公布了兩組CPU漏洞,由於漏洞嚴重而且影響範圍廣泛,引起了全球的關註,成為2018開年以來第一個信息安

紅芯為企業數據安全與隱私保護提供解決

企業辦公瀏覽器過去的一年,網絡安全領域可謂機遇與挑戰並存。一方面,《網絡安全法》的實施,讓人們在網絡安全領域感受到了“國家力量”;另一方面,網絡攻擊、信息泄漏、詐騙等安全事件屢屢爆出,不斷敲響著數據、信息安全的警鐘。 相關數據顯示,現在的網絡安全威脅正在從傳統概念上的PC端和移動端的病毒模式逐漸向數字化和破壞

php 多語言(UTF-8編碼)導出Excel、CSV亂碼解決辦法導出UTF-8編碼的Excel、CSV

csv tex 完整 多語 繁體 HP 項目 .html agen 轉自: https://www.cnblogs.com/kclteam/p/5278926.html 新項目,大概情況是這樣的:可能存在多國、不同語種使用者,比喻有中文、繁體中文,韓文、日本等等,開發

ionic的actionsheet安卓樣式不正常的坑及解決

oid 技術分享 action nsh 註釋 正常的 安卓 img info 這是actionsheet該有的樣子,可是android下變成了這樣: 百度後,發現修改lonic.css,註釋這段代碼就可以了: ionic的actionsheet安卓樣

單元測試多線程解決

tac multipl 還需要 rst 測試 方法 成功 time 發的 遇到問題 曾今在開發的過程遇到一個問題,當時有一個服務是群發郵件的,由於一次發送幾十個上百個,所以就使用了多線程來操作。 在單元測試的時候,我調了這個方法測試下郵件發送,結果總是出現莫名其妙的問題,每

AngularJS進階(三十五)瀏覽器相容性解決

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

LayaAir小遊戲的坑解決

.com 如果 tex sha 版本 目前 代碼 true RoCE 版本 : LayaAir2.0.0bate4 一 : MiniAdpter.init 目前直接在代碼裏設會報錯 , 那只有在底層 laya.wxmini.js裏面設置了Ⅰ,主域 : MiniAdpter.

Java程式設計師從笨鳥到菜鳥(二十四)Xml基礎詳解和DTD驗證 Java程式設計師從笨鳥到菜鳥(二十三)常見亂碼解決以及javaBean基礎知識

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

自助查詢解決

如果你曾經出國旅遊,尤其是去歐洲自由行,有沒有在餐館點菜的慘痛經歷?(當然金拱門、K 記不算……),面對選單上一個個似是而非的單詞,有沒有憂桑? 有沒有惆悵?有沒有很……呃,飢餓? 同樣,在做前端業務查詢時,如果你不清楚 SQL 這種“點菜”的語言,那麼怎麼去找那些欄位、設

網易雲捕效能踩坑解決上篇

本文由作者餘寶虹授權網易雲社群釋出。 從零開始設計開發一個日處理資料8億的大資料高併發實時系統,哪些效能問題需要特別注意?這裡我們一起梳理一下,本文中我將以PE,SA同學戲稱的DDOS系統—網易雲捕設計開發實踐中兩年的時間裡碰到的真實問題,踩過的坑及解決問題的方法和大家一起討論如何解決這些問題。文中不會大談