/** * Sets text of this message with the charset. * * @param text * the text. * @param charset * the charset of the text. */ public BodyPartBuilder setBody(String text, Charset charset) throws IOException { return setBody(text, null, charset); }
private void addHtml(MultipartBuilder builder, Optional<String> htmlBody) throws IOException { if (htmlBody.isPresent()) { builder.addBodyPart(BodyPartBuilder.create() .use(bodyFactory) .setBody(htmlBody.get(), StandardCharsets.UTF_8) .setContentType(HTML_MEDIA_TYPE, UTF_8_CHARSET) .setContentTransferEncoding(QUOTED_PRINTABLE)); } }
private void addText(MultipartBuilder builder, Optional<String> textBody) throws IOException { if (textBody.isPresent()) { builder.addBodyPart(BodyPartBuilder.create() .use(bodyFactory) .setBody(textBody.get(), StandardCharsets.UTF_8) .setContentType(PLAIN_TEXT_MEDIA_TYPE, UTF_8_CHARSET) .setContentTransferEncoding(QUOTED_PRINTABLE)); } }
public MultipartBuilder addTextPart(String text, Charset charset) throws IOException { Charset cs = charset != null ? charset : Charsets.ISO_8859_1; TextBody body = bodyFactory != null ? bodyFactory.textBody( InputStreams.create(text, cs), cs.name()) : BasicBodyFactory.INSTANCE.textBody(text, cs); BodyPart bodyPart = BodyPartBuilder.create() .setBody(body) .setContentType("text/plain", new NameValuePair("charset", cs.name())) .setContentTransferEncoding(Charsets.US_ASCII.equals(cs) ? "7bit" : "quoted-printable") .build(); return addBodyPart(bodyPart); }
private void addBody(CreationMessage newMessage, MultipartBuilder builder) throws IOException { if (newMessage.getHtmlBody().isPresent() && newMessage.getTextBody().isPresent()) { Multipart body = createMultipartAlternativeBody(newMessage); builder.addBodyPart(BodyPartBuilder.create().setBody(body)); } else { addText(builder, newMessage.getTextBody()); addHtml(builder, newMessage.getHtmlBody()); } }
@Before public void setup() throws IOException { testee = new MessageContentExtractor(); textPart = BodyPartBuilder.create().setBody(TEXT_CONTENT, "plain", StandardCharsets.UTF_8); htmlPart = BodyPartBuilder.create().setBody(HTML_CONTENT, "html", StandardCharsets.UTF_8); textAttachment = BodyPartBuilder.create() .setBody(ATTACHMENT_CONTENT, "plain", StandardCharsets.UTF_8) .setContentDisposition("attachment"); inlineText = BodyPartBuilder.create() .setBody(ATTACHMENT_CONTENT, "plain", StandardCharsets.UTF_8) .setContentDisposition("inline"); inlineImage = BodyPartBuilder.create() .setBody(new byte[0], "image/png") .setContentDisposition("inline"); }
@BeforeEach void setup() throws IOException { testee = new MessageContentExtractor(); textPart = BodyPartBuilder.create().setBody(TEXT_CONTENT, "plain", StandardCharsets.UTF_8); htmlPart = BodyPartBuilder.create().setBody(HTML_CONTENT, "html", StandardCharsets.UTF_8); textAttachment = BodyPartBuilder.create() .setBody(ATTACHMENT_CONTENT, "plain", StandardCharsets.UTF_8) .setContentDisposition("attachment"); inlineText = BodyPartBuilder.create() .setBody(ATTACHMENT_CONTENT, "plain", StandardCharsets.UTF_8) .setContentDisposition("inline"); inlineImage = BodyPartBuilder.create() .setBody(new byte[0], "image/png") .setContentDisposition("inline"); }
/** * Sets binary content of this message with the given MIME type. * * @param body * the body. * @param mimeType * the MIME media type of the specified body * ("type/subtype"). */ public BodyPartBuilder setBody(byte[] bin, String mimeType) throws IOException { setField(Fields.contentType(mimeType != null ? mimeType : "application/octet-stream")); Body binBody; if (bodyFactory != null) { binBody = bodyFactory.binaryBody(InputStreams.create(bin)); } else { binBody = BasicBodyFactory.INSTANCE.binaryBody(bin); } return setBody(binBody); }
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(); }
public MultipartBuilder addBinaryPart(byte[] bin, String mimeType) throws IOException { BinaryBody body = bodyFactory != null ? bodyFactory.binaryBody(InputStreams.create(bin)) : BasicBodyFactory.INSTANCE.binaryBody(bin); BodyPart bodyPart = BodyPartBuilder.create() .setBody(body) .setContentType(mimeType != null ? mimeType : "application/octet-stream") .setContentTransferEncoding("base64") .build(); return addBodyPart(bodyPart); }
private BodyPart attachmentBodyPart(MessageAttachment att) throws IOException { BodyPartBuilder builder = BodyPartBuilder.create() .use(bodyFactory) .setBody(new BasicBodyFactory().binaryBody(ByteStreams.toByteArray(att.getAttachment().getStream()))) .setField(contentTypeField(att)) .setField(contentDispositionField(att.isInline())) .setContentTransferEncoding(BASE64); contentId(builder, att); return builder.build(); }
@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); }
@Test public 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); }
@Test void extractShouldReturnHtmlAndTextWhenMultipartMixedAndFirstPartIsMultipartAlternative() throws IOException { BodyPart multipartAlternative = BodyPartBuilder.create() .setBody(MultipartBuilder.create("alternative") .addBodyPart(htmlPart) .addBodyPart(textPart) .build()) .build(); Multipart multipartMixed = MultipartBuilder.create("mixed") .addBodyPart(multipartAlternative) .build(); Message message = Message.Builder.of() .setBody(multipartMixed) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).contains(TEXT_CONTENT); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test void extractShouldRetrieveTextAndHtmlBodyWhenOneInlinedTextAttachmentAndMainContentInMultipart() throws IOException { BodyPart multipartAlternative = BodyPartBuilder.create() .setBody(MultipartBuilder.create("alternative") .addBodyPart(textPart) .addBodyPart(htmlPart) .build()) .build(); Multipart multipartMixed = MultipartBuilder.create("mixed") .addBodyPart(multipartAlternative) .addBodyPart(inlineText) .build(); Message message = Message.Builder.of() .setBody(multipartMixed) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).contains(TEXT_CONTENT); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test public void extractShouldRetrieveTextBodyAndHtmlBodyWhenTextBodyInMainMultipartAndHtmlBodyInInnerMultipart() throws IOException { BodyPart multipartRelated = BodyPartBuilder.create() .setBody(MultipartBuilder.create("related") .addBodyPart(htmlPart) .addBodyPart(inlineImage) .build()) .build(); Multipart multipartAlternative = MultipartBuilder.create("alternative") .addBodyPart(textPart) .addBodyPart(multipartRelated) .build(); Message message = Message.Builder.of() .setBody(multipartAlternative) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).contains(TEXT_CONTENT); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test public void extractShouldReturnHtmlAndTextWhenMultipartMixedAndFirstPartIsMultipartAlternative() throws IOException { BodyPart multipartAlternative = BodyPartBuilder.create() .setBody(MultipartBuilder.create("alternative") .addBodyPart(htmlPart) .addBodyPart(textPart) .build()) .build(); Multipart multipartMixed = MultipartBuilder.create("mixed") .addBodyPart(multipartAlternative) .build(); Message message = Message.Builder.of() .setBody(multipartMixed) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getTextBody()).contains(TEXT_CONTENT); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test void extractShouldReturnHtmlAndTextWhenMultipartAlternativeAndFirstPartIsMultipartRelated() throws IOException { BodyPart multipartRelated = BodyPartBuilder.create() .setBody(MultipartBuilder.create("related") .addBodyPart(htmlPart) .build()) .build(); Multipart multipartAlternative = MultipartBuilder.create("alternative") .addBodyPart(multipartRelated) .build(); Message message = Message.Builder.of() .setBody(multipartAlternative) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test public void extractShouldReturnHtmlAndTextWhenMultipartAlternativeAndFirstPartIsMultipartRelated() throws IOException { BodyPart multipartRelated = BodyPartBuilder.create() .setBody(MultipartBuilder.create("related") .addBodyPart(htmlPart) .build()) .build(); Multipart multipartAlternative = MultipartBuilder.create("alternative") .addBodyPart(multipartRelated) .build(); Message message = Message.Builder.of() .setBody(multipartAlternative) .build(); MessageContent actual = testee.extract(message); assertThat(actual.getHtmlBody()).contains(HTML_CONTENT); }
@Test void extractShouldRetrieveTextBodyWithOneInlinedTextAttachmentWithoutCid() throws IOException { //Given BodyPart inlinedTextPart = BodyPartBuilder.create() .setBody(TEXT_CONTENT, "text", StandardCharsets.UTF_8) .build(); HeaderImpl inlinedHeader = new HeaderImpl(); inlinedHeader.addField(Fields.contentDisposition(MimeMessage.INLINE)); inlinedHeader.addField(Fields.contentType("text/plain; charset=utf-8")); inlinedTextPart.setHeader(inlinedHeader); Multipart multipartAlternative = MultipartBuilder.create("alternative") .addBodyPart(inlinedTextPart) .build(); Message message = Message.Builder.of() .setBody(multipartAlternative) .build(); //When MessageContent actual = testee.extract(message); //Then assertThat(actual.getTextBody()).contains(TEXT_CONTENT); }