这个方法返回的是邮件内容的Content-Type中的信息。比如:Content-Type: text/html;charset="GB2312"/**
* 得到消息中的内容信息
* @param path 附件保存的路径
* @param path2 当前URL
* @param eventtype 如果eventtype=1,不显示附件
* @return 返回内容信息
*/
//调用此方法前,要调用MailAccept.getMessageArray()方法得到message
public String getMailContent(String path,String path2,int eventtype) {
String s = "";
String sct = "";
this.path = path; //得到附件保存的路径
this.path2 = strdata.indexStr(path2,"/",8); //得到当前URL
this.eventtype = eventtype;
try {
Object o = message.getContent(); //返回所有消息内容
sct = message.getContentType(); //返回ContentType信息
if (message.isMimeType("text/plain")||message.isMimeType("text/html")||sct==null) {  
   //判断ContentType中是否为GB2312或GBK编码
   if (strdata.regionStr(sct,"GB2312")||strdata.regionStr(sct,"gb2312")||strdata.regionStr(sct,"GBK")||strdata.regionStr(sct,"GB2312_CHARSET")) {
   s = "<pre>"+(String)o+"</pre>";
   coding = "GB2312";
   }
   //判断ContentType中是否为big5编码
   else if (strdata.regionStr(sct,"big5")||strdata.regionStr(sct,"Big5")) {
s = "<pre>"+strdata.getstrTobig((String)o)+"</pre>";
coding = "Big5";
}
//如果没有就调用str类中的getstr进行编码转换
   else 
   s = "<pre>"+strdata.getstr((String)o)+"</pre>";
   return s;
   }
   //判断消息中是否有multipart/*头,如果有就进入Multipart处理
   if (message.isMimeType("multipart/*")) {
Multipart mp = (Multipart)o;
   int cnt = mp.getCount();  
   for (int j = 0; j < cnt; j++) {          
             s="<br>"+getPart(mp.getBodyPart(j),j,2,eventtype);  
   }
  
}
}
catch(MessagingException e ) {
System.err.println("MailContent.getMailContent(): " + e.toString());
}
catch(Exception e) {
System.err.println("MailContent.getMailContent(): " + e.toString());
}
return s;
}

解决方案 »

  1.   

    //对消息multipart/*头下的内容进行处理
    private String getPart(Part part, int partNum,int msgNum,int eventtype) throws MessagingException,IOException {
    String s=""; 
    String s2="";
    String s5="";
    String sct = part.getContentType();//返回multipart/*头下的所有内容
    boolean blnnum = true;
       if (sct == null) {  
       s="无效";
       return s;
           } 
    ContentType ct = new ContentType(sct); //进行头处理
    if (ct.match("text/plain") || ct.match("text/html")) {
    //判断ContentType中是否为GB2312或GBK编码
    if (strdata.regionStr(sct,"GB2312")||strdata.regionStr(sct,"gb2312")||strdata.regionStr(sct,"GBK")||strdata.regionStr(sct,"iso-gb2312")) {
    s1 = "<pre>"+(String)part.getContent()+"</pre>";
    coding = "GB2312";
    }
    //判断ContentType中是否为big5编码
    else if (strdata.regionStr(sct,"big5")||strdata.regionStr(sct,"Big5")) {
    s1 = "<pre>"+strdata.getstrTobig((String)part.getContent())+"</pre>";
    coding = "Big5";
    }
    //如果没有就调用str类中的getstr进行编码转换
    else s1 = "<pre>"+strdata.getstr((String)part.getContent())+"</pre>";
       }
       //如果multipart/*头中还有multipart/alternative头就进行处理
       if(part.isMimeType("multipart/*")) {  
       String s6="";
       Multipart mp = (Multipart)part.getContent();
       int count = mp.getCount();
       for (int i = 0; i < count; i++) {
               if(mp.getBodyPart(i).isMimeType("text/plain") || mp.getBodyPart(i).isMimeType("text/html")||mp.getBodyPart(i).isMimeType("multipart/*"))
               s5=getPart(mp.getBodyPart(i),i,3,eventtype);
      }
       return s5;
       }
       //对附件进行处理
    if (blnAttachment(part)) {
    if (eventtype==1) return s1; //不显示附件
        s3 = "附件:" + getMailAttachment(part) + "<br>" + s3; //得到附件名和下载链接
       }
       s = s1+s3;
    return s; 
    }
      

  2.   

    多谢,不过,我想问一下,只有两种编码方式吗?
    如果是iso8859-1哪?我需要尽量多的可能性,谢谢!
      

  3.   

    iso8859-1我没有试过,我想你可以再加一个判断strdata.regionStr(sct,"iso8859-1"),然后得到邮件内容后new String(str.getBytes("iso8859-1"),"gb2312");
      

  4.   

    请问还有别的可能性吗?
    编码类型一定会写在ContentType里面是吗?
      

  5.   

    ContentType有好几中,你可以看看RFC文档。
    http://www.china-pub.com/computers/eMook/emooknew/RFC/rfc.asp
      

  6.   

    我天,不明白,你这个
    strdata.regionStr(sct,"gb2312")
    那里来的,