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.就是提供来解码的?=
....
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.就是提供来解码的?=
邮件正文实际上也存在类似问题,不知正文的原始内容根据什么方法获取?
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");
}/////////////////////////////
仍然是类似的处理方法