private Multipart createMultipart(CreationMessage newMessage, ImmutableList<MessageAttachment> messageAttachments) { try { if (hasAttachment(messageAttachments)) { MultipartBuilder builder = MultipartBuilder.create(MIXED_SUB_TYPE); addBody(newMessage, builder); Consumer<MessageAttachment> addAttachment = addAttachment(builder); messageAttachments.forEach(addAttachment); return builder.build(); } else { return createMultipartAlternativeBody(newMessage); } } catch (IOException e) { LOGGER.error("Error while creating textBody \n{}\n or htmlBody \n{}", newMessage.getTextBody().get(), newMessage.getHtmlBody().get(), e); throw new RuntimeException(e); } }
private Multipart createMultipartAlternativeBody(CreationMessage newMessage) throws IOException { MultipartBuilder bodyBuilder = MultipartBuilder.create(ALTERNATIVE_SUB_TYPE); addText(bodyBuilder, newMessage.getTextBody()); addHtml(bodyBuilder, newMessage.getHtmlBody()); return bodyBuilder.build(); }
@Test public void extractReportShouldRejectMultipartWithSinglePart() throws Exception { ExtractMDNOriginalJMAPMessageId testee = new ExtractMDNOriginalJMAPMessageId(mock(MailboxManager.class)); Message message = Message.Builder.of() .setBody( MultipartBuilder.create() .setSubType("report") .addTextPart("content", StandardCharsets.UTF_8) .build()) .build(); assertThat(testee.extractReport(message)).isEmpty(); }
@Test void extractShouldReturnHtmlWhenMultipartAlternativeWithoutPlainPart() throws IOException { Multipart multipart = MultipartBuilder.create("alternative") .addBodyPart(htmlPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).isEmpty(); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test public void extractShouldReturnEmptyWhenMultipartMixedAndFirstPartIsATextAttachment() throws IOException { Multipart multipart = MultipartBuilder.create("mixed") .addBodyPart(textAttachment) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).isEmpty(); assertThat(actual.getHtmlBody()).isEmpty(); }
@Test public void extractReportShouldRejectSecondPartWithBadContentType() throws IOException { ExtractMDNOriginalJMAPMessageId testee = new ExtractMDNOriginalJMAPMessageId(mock(MailboxManager.class)); Message message = Message.Builder.of() .setBody(MultipartBuilder.create() .setSubType("report") .addTextPart("first", StandardCharsets.UTF_8) .addTextPart("second", StandardCharsets.UTF_8) .build()) .build(); assertThat(testee.extractReport(message)).isEmpty(); }
@Test void extractShouldReturnHtmlWhenMultipartRelated() throws IOException { Multipart multipart = MultipartBuilder.create("related") .addBodyPart(htmlPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).isEmpty(); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test public void extractShouldReturnHtmlWhenMultipartRelated() throws IOException { Multipart multipart = MultipartBuilder.create("related") .addBodyPart(htmlPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).isEmpty(); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test void extractShouldReturnTextWhenMultipartAlternativeWithoutHtmlPart() throws IOException { Multipart multipart = MultipartBuilder.create("alternative") .addBodyPart(textPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).contains(TEXT_CONTENT); assertThat(actual.getHtmlBody()).isEmpty(); }
@Test void extractShouldReturnEmptyWhenMultipartMixedAndFirstPartIsATextAttachment() throws IOException { Multipart multipart = MultipartBuilder.create("mixed") .addBodyPart(textAttachment) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).isEmpty(); assertThat(actual.getHtmlBody()).isEmpty(); }
@Test public void extractShouldReturnHtmlWhenMultipartAlternativeWithoutPlainPart() throws IOException { Multipart multipart = MultipartBuilder.create("alternative") .addBodyPart(htmlPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).isEmpty(); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test public void extractShouldReturnTextWhenMultipartAlternativeWithoutHtmlPart() throws IOException { Multipart multipart = MultipartBuilder.create("alternative") .addBodyPart(textPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).contains(TEXT_CONTENT); assertThat(actual.getHtmlBody()).isEmpty(); }
@Test void extractShouldReturnHtmlAndTextWhenMultipartAlternative() throws IOException { Multipart multipart = MultipartBuilder.create("alternative") .addBodyPart(textPart) .addBodyPart(htmlPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).contains(TEXT_CONTENT); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test public void extractShouldReturnFirstPartOnlyWhenMultipartMixedAndFirstPartIsHtml() throws IOException { Multipart multipart = MultipartBuilder.create("mixed") .addBodyPart(htmlPart) .addBodyPart(textPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).isEmpty(); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test void extractShouldReturnFirstPartOnlyWhenMultipartMixedAndFirstPartIsHtml() throws IOException { Multipart multipart = MultipartBuilder.create("mixed") .addBodyPart(htmlPart) .addBodyPart(textPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).isEmpty(); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test public void extractShouldReturnHtmlAndTextWhenMultipartAlternative() throws IOException { Multipart multipart = MultipartBuilder.create("alternative") .addBodyPart(textPart) .addBodyPart(htmlPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).contains(TEXT_CONTENT); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test public void extractShouldReturnFirstNonAttachmentPartWhenMultipartMixed() throws IOException { Multipart multipart = MultipartBuilder.create("mixed") .addBodyPart(textAttachment) .addBodyPart(htmlPart) .addBodyPart(textPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); assertThat(actual.getTextBody()).isEmpty(); }
private Multipart asMime4JMultipart() throws IOException { MultipartBuilder builder = MultipartBuilder.create(REPORT_SUB_TYPE); builder.addContentTypeParameter(new NameValuePair("report-type", DISPOSITION_NOTIFICATION_REPORT_TYPE)); builder.addBodyPart(BodyPartBuilder.create() .use(new BasicBodyFactory()) .setBody(humanReadableText, Charsets.UTF_8) .setContentType("text/plain", UTF_8_CHARSET)); builder.addBodyPart(BodyPartBuilder.create() .use(new BasicBodyFactory()) .setBody(report.formattedValue(), Charsets.UTF_8) .setContentType(DISPOSITION_CONTENT_TYPE, UTF_8_CHARSET)); return builder.build(); }
@Test void extractShouldReturnFirstNonAttachmentPartWhenMultipartMixed() throws IOException { Multipart multipart = MultipartBuilder.create("mixed") .addBodyPart(textAttachment) .addBodyPart(htmlPart) .addBodyPart(textPart) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); assertThat(actual.getTextBody()).isEmpty(); }
@Test void extractShouldReturnInlinedTextBodyWithoutCIDWhenNoOtherValidParts() throws IOException { String textBody = "body 1"; Multipart multipart = MultipartBuilder.create("report") .addBodyPart(BodyPartBuilder.create() .setBody(textBody, "plain", StandardCharsets.UTF_8) .setContentDisposition("inline")) .addBodyPart(BodyPartBuilder.create() .setBody("body 2", "rfc822-headers", StandardCharsets.UTF_8) .setContentDisposition("inline")) .build(); Message message = Message.Builder.of() .setBody(multipart) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).contains(textBody); }