private MimeMessage mimeMsg; //MIME邮件对象sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
mimeMsg.setSubject(("=?GB2312?B?"+enc.encode(mailSubject.getBytes())+"?="));//邮件主题

解决方案 »

  1.   

    楼上的大哥,这封邮件是一种是QP(quoted-printable)方式编码,而不是base64编码,base64我可以成功的转过来
      

  2.   

    我都是用getSubject()方法来返回主题的,大部分的邮件系统都能正常显示。但是有些服务器(163的邮件没有对中文进行编码,也没指定编码)的邮件没有指定使用的编码方式就需要进行特殊处理了。但是也不能完全用指定的编码来进行转码,foxmail的客户端发送的邮件如果主题里面包含一些不常用的gbk汉字,解码的时候还是会出现乱码的问题。我是通过修改mail.jar里面的编码映射文件解决的。另外如果附件的文件名包含不常用汉字的时候,如果不修改编码映射文件的时候也会出现乱码的问题。
    如果有问题,可以加我MSN [email protected]
      

  3.   

    当初也做过一个收件系统,也遇到过乱码等形形色色的问题,事实上这不是开发本身的问题,在写这类系统前还是要看关于mime的specification。规范看过后,几乎就能解决所有的问题了,希望楼主花半天时间看一看RFC 1521这篇关于MIME的规范。不仅仅是乱码,相信你还会碰到为什么outlook发出的邮件会有两份内容这样的问题,里面都有解释。
      

  4.   

    /**
         * <br>
         * 方法说明:把主题转换为中文 <br>
         * 输入参数:String strText <br>
         * 返回类型:
         */
        public static String transferChinese(String strText) {
            try {
                strText = MimeUtility.encodeText(new String(strText.getBytes(),
                        "GB2312"), "GB2312", "B");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }        return strText;
        }