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 .kAF9BBR27094@mail.miibeian.gov.cn >
From:webmaster@mail.miibeian.gov.cn
To:fzg502@163.com
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多网页,但翻了一下,没发现有说这个问题的,希望我的一个解决办法可以帮到有需要的人

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值