MimeMessage mesg;
....
public String getSubject()
    {
        try
        {
            subject = mesg.getSubject();
            if(subject == null || subject.equals(""))
                subject = "NULL";
            String tmp = mesg.getHeader("Subject")[0];
            if(tmp.indexOf("=?") == -1)
                subject = new String(tmp.getBytes("8859_1"), "GB2312");
        }
        catch(Exception e)
        {
            e.printStackTrace();
            subject = "NULL";
        }
        return subject;
    }
//------------------------------
因为mesg.getSubject经过封装。要得到最原始的subject应该是mesg.getHeader("subject");
原始的内容可能是?=gb2312=?JAdfjdff .. (具体内容可能不是这样,但是?=是指定编码的)
mesg.getSubject的时候就是依据这个?=之间的内容解码的,如果不存在?=指定的解码,就默认为8858_1编码这个时候就要手动转化为本地的gb2312  顺便说一句MimeUtilites.就是提供来解码的?=

解决方案 »

  1.   

    用UE看看是不是用GB2312进行编码的
      

  2.   

    谢谢楼上两位!顺便问一下m_m1m2m3m4m5(毛大军)UE是什么东东?
      

  3.   

    请问zealVampire(蚊子+鹤舞白沙) 
    邮件正文实际上也存在类似问题,不知正文的原始内容根据什么方法获取?
      

  4.   

    public void processMailContent(Part part, boolean downFlag, String filename, String savePath)
            throws Exception
        {
            Object o = part.getContent();
            if(o == null)
                content.append(o.toString() + ":content null.\n");
            if(part.isMimeType("text/*"))
            {
                if(!downFlag)
                {
                    String tmp = o.toString();
                    String contentType = mesg.getContentType().toLowerCase();
                    if(contentType.indexOf("charset") == -1)
                        tmp = new String(tmp.getBytes("8859_1"), "GB2312");
                    content.append(tmp).append("\n");
                }
            } else
            if(part.isMimeType("multipart/*"))
            {
                MimeMultipart parts = (MimeMultipart)o;
                processMultipart(parts, downFlag, filename, savePath);
            } else
            if(mesg.isMimeType("message/rfc822"))
                processMailContent((Part)o, downFlag, filename, savePath);
            else
                content.append(o.toString() + ":Unknown mime type.\n");
        }/////////////////////////////
    仍然是类似的处理方法
      

  5.   

    判断得到contentType 看她是否有默认编码charset没有的话 就用本地编码gb2312
      

  6.   

    我已经解决了,不是还是要非常感谢 zealVampire(蚊子+鹤舞白沙) !