/**
* 得到消息中的内容信息
* @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.   

    /*得到邮件正文的文本描述*/
        public String getPlainText() {
            int size = v.size();
            for(int i = 0; i < size; i++) {
                Part p = (Part)v.get(i);
                try {
                    if(p.isMimeType("text/plain")) {
                        Object o = p.getContent();
                        return (String)o;
                    }
                } catch(Exception e) {
                    e.printStackTrace();
                }
            }
            return null;
        }我得到如下异常:
    java.io.UnsupportedEncodingException: gbk at sun.io.Converters.getConverterClass(Converters.java:114) at sun.io.Converters.newConverter(Converters.java:145) at sun.io.ByteToCharConverter.getConverter(ByteToCharConverter.java:64) at sun.nio.cs.StreamDecoder$ConverterSD.<init>(StreamDecoder.java:220) at sun.nio.cs.StreamDecoder$ConverterSD.<init>(StreamDecoder.java:206) at sun.nio.cs.StreamDecoder.forInputStreamReader(StreamDecoder.java:74) at java.io.InputStreamReader.<init>(InputStreamReader.java:83) at com.sun.mail.handlers.text_plain.getContent(text_plain.java:65) at javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:755) at javax.activation.DataHandler.getContent(DataHandler.java:511) at javax.mail.internet.MimeBodyPart.getContent(MimeBodyPart.java:531) at mail.MailMessage.getPlainText(MailMessage.java:203) at mail.MailMessage.main(MailMessage.java:340)怎么getContent()不能解gbk的编码?应该怎么解决?
      

  3.   

    这样一定行
        public String getPlainText() {
            int size = v.size();
            for(int i = 0; i < size; i++) {
                Part p = (Part)v.get(i);
                try {
                    if(p.isMimeType("text/plain")) {
                        InputStream in = p.getInputStream();
                        BufferedReader br = new BufferedReader(new InputStreamReader(in),"gbk");
                        String line;
                        StringBuffer sb = new StringBuffer();
                        While((line = br.readLine())!=null)
                             sb.append(line);
                        return sb.toString();
                    }
                } catch(Exception e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
      

  4.   

    public String getPlainText() {
            int size = v.size();
            for(int i = 0; i < size; i++) {
                Part p = (Part)v.get(i);
                try {
                    if(p.isMimeType("text/plain")) {
                        InputStream in = p.getInputStream();
                        BufferedReader br = new BufferedReader(new InputStreamReader(in,"gb2312"));
                        String line;
                        StringBuffer sb = new StringBuffer();
                        While((line = br.readLine())!=null)
                             sb.append(line);
                        return sb.toString();
                    }
                } catch(Exception e) {
                    e.printStackTrace();
                }
            }
            return null;
        }就可以读出来了,谢谢。javamail不支持gbk编码啊