public Message fromMetaDataWithContent(MetaDataWithContent message) throws MailboxException { org.apache.james.mime4j.dom.Message mimeMessage = parse(message); MessageContent messageContent = extractContent(mimeMessage); Optional<String> htmlBody = messageContent.getHtmlBody(); Optional<String> mainTextContent = mainTextContent(messageContent); Optional<String> textBody = computeTextBodyIfNeeded(messageContent, mainTextContent); String preview = messagePreview.compute(mainTextContent); return Message.builder() .id(message.getMessageId()) .blobId(BlobId.of(blobManager.toBlobId(message.getMessageId()))) .threadId(message.getMessageId().serialize()) .mailboxIds(message.getMailboxIds()) .inReplyToMessageId(getHeader(mimeMessage, "in-reply-to")) .keywords(message.getKeywords()) .subject(Strings.nullToEmpty(mimeMessage.getSubject()).trim()) .headers(toMap(mimeMessage.getHeader().getFields())) .from(firstFromMailboxList(mimeMessage.getFrom())) .to(fromAddressList(mimeMessage.getTo())) .cc(fromAddressList(mimeMessage.getCc())) .bcc(fromAddressList(mimeMessage.getBcc())) .replyTo(fromAddressList(mimeMessage.getReplyTo())) .size(message.getSize()) .date(getDateFromHeaderOrInternalDateOtherwise(mimeMessage, message)) .textBody(textBody) .htmlBody(htmlBody) .preview(preview) .attachments(getAttachments(message.getAttachments())) .build(); }