code: public static ParsedMimeMessageComponents parseMimeMessage(@Nonnull final MimeMessage mimeMessage) {
  		final ParsedMimeMessageComponents parsedComponents = new ParsedMimeMessageComponents();
  		parsedComponents.messageId = parseMessageId(mimeMessage);
  		parsedComponents.subject = parseSubject(mimeMessage);
  		parsedComponents.toAddresses.addAll(parseToAddresses(mimeMessage));
  		parsedComponents.ccAddresses.addAll(parseCcAddresses(mimeMessage));
  		parsedComponents.bccAddresses.addAll(parseBccAddresses(mimeMessage));
  		parsedComponents.fromAddress = parseFromAddress(mimeMessage);
  		parsedComponents.replyToAddresses = parseReplyToAddresses(mimeMessage);
  		parseMimePartTree(mimeMessage, parsedComponents);
  		moveInvalidEmbeddedResourcesToAttachments(parsedComponents);
  		return parsedComponents;
  	}
docs: Extracts the content of a MimeMessage recursively.