in server/src/main/java/org/apache/hupa/server/utils/MessageUtils.java [140:203]
public static boolean handleParts(Message message, Object content, StringBuffer sbPlain,
ArrayList<MessageAttachment> attachmentList) throws UnsupportedEncodingException, MessagingException,
IOException {
boolean isHTML = false;
if (content instanceof String) {
if (message.getContentType().toLowerCase().startsWith("text/html")) {
isHTML = true;
} else {
isHTML = false;
}
sbPlain.append((String) content);
} else if (content instanceof Multipart) {
Multipart mp = (Multipart) content;
String multipartContentType = mp.getContentType().toLowerCase();
String text = null;
if (multipartContentType.startsWith("multipart/alternative")) {
isHTML = handleMultiPartAlternative(mp, sbPlain);
} else {
for (int i = 0; i < mp.getCount(); i++) {
Part part = mp.getBodyPart(i);
String contentType = part.getContentType().toLowerCase();
Boolean bodyRead = sbPlain.length() > 0;
if (!bodyRead && contentType.startsWith("text/plain")) {
isHTML = false;
text = (String) part.getContent();
} else if (!bodyRead && contentType.startsWith("text/html")) {
isHTML = true;
text = (String) part.getContent();
} else if (!bodyRead && contentType.startsWith("message/rfc822")) {
// Extract the message and pass it
MimeMessage msg = (MimeMessage) part.getDataHandler().getContent();
isHTML = handleParts(msg, msg.getContent(), sbPlain, attachmentList);
} else {
if (part.getFileName() != null) {
// Inline images are not added to the attachment
// list
// TODO: improve the in-line images detection
if (part.getHeader("Content-ID") == null) {
MessageAttachment attachment = new MessageAttachmentImpl();
attachment.setName(MimeUtility.decodeText(part.getFileName()));
attachment.setContentType(part.getContentType());
attachment.setSize(part.getSize());
attachmentList.add(attachment);
}
} else {
isHTML = handleParts(message, part.getContent(), sbPlain, attachmentList);
}
}
}
if (text != null)
sbPlain.append(text);
}
}
return isHTML;
}