你好,听说你写过一篇关于javaMail解析邮件的文章

shpeng 发布于 2015/01/05 10:27
阅读 794
收藏 0

@红薯 你好,想跟你请教个问题:你好,听说你写过一篇关于javaMail解析邮件的文章,我现在遇到了一点问题,我在用IMAP解析邮件的时候报了个错误,

Exception in thread "main" java.io.IOException: No content
at com.sun.mail.imap.IMAPInputStream.fill(IMAPInputStream.java:167)
at com.sun.mail.imap.IMAPInputStream.read(IMAPInputStream.java:218)
at com.sun.mail.imap.IMAPInputStream.read(IMAPInputStream.java:244)
at com.sun.mail.util.BASE64DecoderStream.getByte(BASE64DecoderStream.java:358)
at com.sun.mail.util.BASE64DecoderStream.decode(BASE64DecoderStream.java:249)
at com.sun.mail.util.BASE64DecoderStream.read(BASE64DecoderStream.java:144)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at com.sun.mail.handlers.text_plain.getContent(text_plain.java:125)
at javax.activation.DataSourceDataContentHandler.getContent(Unknown Source)
at javax.activation.DataHandler.getContent(Unknown Source)
at javax.mail.internet.MimeBodyPart.getContent(MimeBodyPart.java:657)
at com.egoonet.util.email.EmailParse.getMailContent(EmailParse.java:306)
at com.egoonet.util.email.EmailParse.getMailContent(EmailParse.java:315)
at com.egoonet.util.email.EmailParse.main(EmailParse.java:540)
如果用POP3解析,那没有问题,解析正文内容代码如下:

 /**   
         * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析   
         */   
        public void getMailContent(Part part) throws Exception {    
            String contenttype = part.getContentType();    
            
            System.out.println(contenttype);
            
            int nameindex = contenttype.indexOf("name");    
            boolean conname = false;    
            if (nameindex != -1)    
                conname = true;    
            System.out.println("CONTENTTYPE: " + contenttype);    
            if (part.isMimeType("text/plain") && !conname) {    
                bodytext.append((String) part.getContent());    
            } else if (part.isMimeType("text/html") && !conname) {    
                bodytext.append((String) part.getContent());    
            } else if (part.isMimeType("multipart/*")) {    
                Multipart multipart = (Multipart) part.getContent();   
                
                int counts = multipart.getCount();  
                System.out.println(counts);
                for (int i = 0; i < counts; i++) {    
                    getMailContent(multipart.getBodyPart(i));    
                }    
            } else if (part.isMimeType("message/rfc822")) {    
                getMailContent((Part) part.getContent());    
            } else {}    
        }    
麻烦您给点意见



加载中
0
红薯
红薯

IMAP 和 POP3 的差别在于 IMAP 的内容都在服务器端,要专门去读取内容才能解析吧

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部