.collect(Collectors.toList())); messageBuilder.setSubject(newMessage.getSubject()); messageBuilder.setMessageId(generateUniqueMessageId(fromAddress));
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 generateMDNMessageShouldFailOnMissingDisposition() throws Exception { String senderAddress = "sender@local"; Message originMessage = Message.Builder.of() .setMessageId("45554@local.com") .setFrom(senderAddress) .setBody("body", StandardCharsets.UTF_8) .addField(new RawField(JmapMDN.RETURN_PATH, "<" + senderAddress + ">")) .build(); assertThatThrownBy(() -> MDN.generateMDNMessage(originMessage, MAILBOX_SESSION)) .isInstanceOf(InvalidOriginMessageForMDNException.class); }
@Test public void generateMDNMessageShouldUseDispositionHeaders() throws Exception { String senderAddress = "sender@local"; Message originMessage = Message.Builder.of() .setMessageId("45554@local.com") .setFrom(senderAddress) .setBody("body", StandardCharsets.UTF_8) .addField(new RawField(JmapMDN.RETURN_PATH, "<" + senderAddress + ">")) .addField(new RawField(JmapMDN.DISPOSITION_NOTIFICATION_TO, "<" + senderAddress + ">")) .build(); assertThat( MDN.generateMDNMessage(originMessage, MAILBOX_SESSION) .getTo()) .extracting(address -> (Mailbox) address) .extracting(Mailbox::getAddress) .containsExactly(senderAddress); }
public MessageBuilder setMessageId(String messageId) { builder.setMessageId(messageId); return this; }