public Message generateMDNMessage(Message originalMessage, MailboxSession mailboxSession) throws ParseException, IOException, InvalidOriginMessageForMDNException { User user = mailboxSession.getUser().getCoreUser(); return MDN.builder() .report(generateReport(originalMessage, mailboxSession)) .humanReadableText(textBody) .build() .asMime4JMessageBuilder() .setTo(getSenderAddress(originalMessage)) .setFrom(user.asString()) .setSubject(subject) .setMessageId(MimeUtil.createUniqueMessageId(user.getDomainPart().map(Domain::name).orElse(null))) .build(); }
@Test public void mdnShouldBeConvertibleToMime4JMessage() throws Exception { Message message = MDN.builder() .humanReadableText("Explanation:\n" + " - We should always write detailed unit tests\n" + " - We should think of all edge cases\n") .report(MINIMAL_REPORT) .build() .asMime4JMessageBuilder() .build(); assertThat(asString(message)) .contains("MIME-Version: 1.0\r\n" + "Content-Type: multipart/report;") .contains("Content-Type: text/plain; charset=UTF-8\r\n" + "\r\n" + "Explanation:\n" + " - We should always write detailed unit tests\n" + " - We should think of all edge cases") .contains("Content-Type: message/disposition-notification; charset=UTF-8\r\n" + "\r\n" + "Final-Recipient: rfc822; final@domain.com\r\n" + "Disposition: automatic-action/MDN-sent-automatically;deleted"); }
@Test public void mime4JMessageExportShouldGenerateExpectedContentType() throws Exception { Message message = MDN.builder() .humanReadableText("RFCs are not funny") .report(MINIMAL_REPORT) .build() .asMime4JMessageBuilder() .build(); assertThat(asString(message)) .containsPattern(Pattern.compile("Content-Type: multipart/report;.*(\r\n.+)*report-type=disposition-notification.*(\r\n.+)*\r\n\r\n")); }