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(); 获取所有内容,如果是,有任何方法可以避免获取所有内容
感谢您的帮助...
答案 0 :(得分:0)
使用mimeMessage.isMimeType(“multipart / ”)和mimeMessage.isMimeType(“text / ”),而不是调用getContent并切换它是否为Multipart。请参阅msgshow.java sample program。
您可以使用bodyPart.getInputStream以递增方式读取文本内容,而不是一次性获取文本内容,这可能会有所帮助,这取决于您在阅读后使用它做什么。
当然,您可以使用Folder.fetch方法预取消息元数据,以加快处理消息的其他部分。有关示例,请再次参见msgshow.java程序。