阅读消息文本而不获取所有内容

时间:2014-12-06 17:27:02

标签: java javamail

public void getMessageById(
            @PathParam("folderName") String folderName,
            @PathParam("id") String id) {

        MailMessage mailMessage = new MailMessage();
        MimeMessage mimeMessage = null;
        try {

            Store store = mailSession.getStore();
            store.connect("localhost", email, password);
            Folder folder = store.getDefaultFolder();
            folder = folder.getFolder(folderName.toUpperCase());
            folder.open(Folder.READ_ONLY);

            SearchTerm searchTerm = new MessageIDTerm(id);
            Message[] messages = folder.search(searchTerm);


            if (messages.length > 0) {
                mimeMessage = (MimeMessage) messages[0];
            }

            if (mimeMessage != null) {

                Object objRef = mimeMessage.getContent();

                if (objRef != null) {

                    // if message content is not multipart
                    if (!(objRef instanceof Multipart)) {

                        //get message text here
                                System.out.println(mimeMessage.getContent().toString())
                    } else {
                        Multipart multipart = (Multipart) objRef;

                        for (int i = 0; i < multipart.getCount(); i++) {
                            BodyPart bodyPart = multipart.getBodyPart(i);
                            if (bodyPart.isMimeType("text/*")) {
                                //get message text here
                                System.out.println(bodyPart.getContent()
                                        .toString())
                            }
                            if (!Part.ATTACHMENT.equalsIgnoreCase(bodyPart
                                    .getDisposition())) {
                                continue; // dealing with attachments only
                            }

                            if (bodyPart.isMimeType("image/*")) {


                            }



                        }

                    }

                }

            }

            folder.close(false);
            store.close();
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

问题是需要很长时间才能获取消息文本。

对象objRef = mimeMessage.getContent(); 获取所有内容,如果是,有任何方法可以避免获取所有内容

感谢您的帮助...

1 个答案:

答案 0 :(得分:0)

使用mimeMessage.isMimeType(“multipart / ”)和mimeMessage.isMimeType(“text / ”),而不是调用getContent并切换它是否为Multipart。请参阅msgshow.java sample program

您可以使用bodyPart.getInputStream以递增方式读取文本内容,而不是一次性获取文本内容,这可能会有所帮助,这取决于您在阅读后使用它做什么。

当然,您可以使用Folder.fetch方法预取消息元数据,以加快处理消息的其他部分。有关示例,请再次参见msgshow.java程序。