我也做过用过java mail时,收邮件的时为这个乱码问题简直焦头烂额,不同的邮件服务器还各有不同,至于你说的这个问题
以"=?gb2312?B?"打头的是BASE64编码的标志
可以用javax.mail.internet.MimeUtility 的 decodeText方法解码如果是BASE64格式的用new String(str.getByte("iso8859_1"),"gbk")即可我不知道你的java mail的版本是不是最新的,以我的经验,目前java mail的MimeMessage
的getSubject() ,getFrom()之类的方法获得都是已经解码了的字符,至少解了BASE64的编码,具体你自己试一试吧
以"=?gb2312?B?"打头的是BASE64编码的标志
可以用javax.mail.internet.MimeUtility 的 decodeText方法解码如果是BASE64格式的用new String(str.getByte("iso8859_1"),"gbk")即可我不知道你的java mail的版本是不是最新的,以我的经验,目前java mail的MimeMessage
的getSubject() ,getFrom()之类的方法获得都是已经解码了的字符,至少解了BASE64的编码,具体你自己试一试吧
如果 不 是BASE64格式的用new String(str.getByte("iso8859_1"),"gbk")即可!!
MimeMessage mm=(MimeMessage)message[1];
mm.getEncoding();//不知道可不可以得到当前的编码
试试把,我没有试过;
至于"=?gb2312?B?1ck9ba"这种乱码,如果是邮件服务器或者在网络传输过程中产生的,好像没有办法解决吧?
如果是你的应用产生的,按照你的应用的编码还原吧
http://community.csdn.net/Expert/topic/2657/2657235.xml?temp=.6036493
特别注意这句:
msg.setDataHandler(new DataHandler(body, "text/html"));
要改为:
msg.setDataHandler(new DataHandler(body, "text/html;gb2312"));这个是半年前的事情了。当时我测试了几个服务器收邮件都没有出现乱玛
现在记性不好了。要是有什么错误就不好意思了:)