.map(this::convertEmailToMimeHeader) .collect(Collectors.toList())); messageBuilder.setSubject(newMessage.getSubject()); messageBuilder.setMessageId(generateUniqueMessageId(fromAddress));
public InMemoryMessageManagerTestSystem(MailboxManager mailboxManager) { super(mailboxManager); this.mailboxManager = mailboxManager; this.lastMessageIdUsed = Optional.empty(); try { this.message = Message.Builder.of() .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build(); } catch (IOException e) { throw new RuntimeException(e); } }
@Test public void processShouldReturnHeadersFieldWhenSpecificHeadersRequestedInPropertyList() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage( AppendCommand.from( org.apache.james.mime4j.dom.Message.Builder.of() .setFrom("user@domain.tld") .setField(new RawField("header1", "Header1Content")) .setField(new RawField("HEADer2", "Header2Content")) .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8)), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message1.getMessageId())) .properties(ImmutableList.of("headers.from", "headers.heADER2")) .build(); Set<MessageProperty> expected = Sets.newHashSet(MessageProperty.id, MessageProperty.headers); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result).hasSize(1); assertThat(result.get(0).getProperties()) .isEqualTo(Optional.of(expected)); }
@Test @SuppressWarnings("unchecked") public void getMailboxesShouldReturnMailboxesWhenAvailable() throws Exception { MailboxPath mailboxPath = MailboxPath.forUser(USERNAME, "name"); MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(mailboxPath, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(mailboxPath, mailboxSession); messageManager.appendMessage(MessageManager.AppendCommand.from( Message.Builder.of() .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8)), mailboxSession); messageManager.appendMessage(MessageManager.AppendCommand.from( Message.Builder.of() .setSubject("test2") .setBody("testmail", StandardCharsets.UTF_8)), mailboxSession); GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder() .build(); List<JmapResponse> getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, clientId, mailboxSession).collect(Collectors.toList()); assertThat(getMailboxesResponse) .hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMailboxesResponse.class) .extracting(GetMailboxesResponse.class::cast) .flatExtracting(GetMailboxesResponse::getList) .extracting(Mailbox::getId, Mailbox::getName, Mailbox::getUnreadMessages) .containsOnly(Tuple.tuple(InMemoryId.of(1), mailboxPath.getName(), Number.fromLong(2L))); }
@Test @SuppressWarnings("unchecked") public void processShouldNotOverrideTextBodyWhenItIsThere() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message = inbox.appendMessage( AppendCommand.from(org.apache.james.mime4j.dom.Message.Builder.of() .setSubject("message subject") .setBody(MultipartBuilder.create() .setSubType("alternative") .addBodyPart(BodyPartBuilder.create() .setBody("My plain message", "plain", StandardCharsets.UTF_8)) .addBodyPart(BodyPartBuilder.create() .setBody("<a>The </a> <strong>HTML</strong> message", "html", StandardCharsets.UTF_8)) .build())), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message.getMessageId())) .build(); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result).hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMessagesResponse.class) .extracting(GetMessagesResponse.class::cast) .flatExtracting(GetMessagesResponse::list) .extracting(Message::getId, Message::getTextBody, Message::getHtmlBody) .containsOnly(Tuple.tuple(message.getMessageId(), Optional.of("My plain message"), Optional.of("<a>The </a> <strong>HTML</strong> message"))); }
@Test public void processShouldNotFailOnSingleMessageFailure() throws Exception { MessageFactory messageFactory = mock(MessageFactory.class); testee = new GetMessagesMethod(messageFactory, messageIdManager, new DefaultMetricFactory()); MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); org.apache.james.mime4j.dom.Message messageContent = org.apache.james.mime4j.dom.Message.Builder.of() .setFrom("user@domain.tld") .setField(new RawField("header1", "Header1Content")) .setField(new RawField("HEADer2", "Header2Content")) .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8) .build(); ComposedMessageId message1 = inbox.appendMessage(AppendCommand.from(messageContent), session); ComposedMessageId message2 = inbox.appendMessage(AppendCommand.from(messageContent), session); when(messageFactory.fromMetaDataWithContent(any())) .thenReturn(mock(Message.class)) .thenThrow(new RuntimeException()); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message1.getMessageId(), message2.getMessageId())) .properties(ImmutableList.of("mailboxIds")) .build(); List<JmapResponse> responses = testee.process(request, clientId, session).collect(Guavate.toImmutableList()); assertThat(responses).hasSize(1); Method.Response response = responses.get(0).getResponse(); assertThat(response).isInstanceOf(GetMessagesResponse.class); GetMessagesResponse getMessagesResponse = (GetMessagesResponse) response; assertThat(getMessagesResponse.list()).hasSize(1); }
@Test public void getMailboxesShouldReturnCorrectTotalMessagesCount() throws Exception { MailboxPath mailboxPath = MailboxPath.forUser(USERNAME, "name"); MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME); mailboxManager.createMailbox(mailboxPath, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(mailboxPath, mailboxSession); messageManager.appendMessage(MessageManager.AppendCommand.from( Message.Builder.of() .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8)), mailboxSession); messageManager.appendMessage(MessageManager.AppendCommand.from( Message.Builder.of() .setSubject("test2") .setBody("testmail", StandardCharsets.UTF_8)), mailboxSession); GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder() .build(); List<JmapResponse> getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, clientId, mailboxSession).collect(Collectors.toList()); assertThat(getMailboxesResponse) .hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMailboxesResponse.class) .extracting(GetMailboxesResponse.class::cast) .flatExtracting(GetMailboxesResponse::getList) .extracting(Mailbox::getTotalMessages) .containsExactly(Number.fromLong(2L)); }
@Test public void processShouldReturnPropertyFilterWhenFilteringHeadersRequested() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage( AppendCommand.from( org.apache.james.mime4j.dom.Message.Builder.of() .setFrom("user@domain.tld") .setField(new RawField("header1", "Header1Content")) .setField(new RawField("HEADer2", "Header2Content")) .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8)), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message1.getMessageId())) .properties(ImmutableList.of("headers.from", "headers.heADER2")) .build(); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result) .hasSize(1) .extracting(JmapResponse::getFilterProvider) .are(new Condition<>(Optional::isPresent, "present")); SimpleFilterProvider actualFilterProvider = result.get(0).getFilterProvider().get(); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setFilterProvider(actualFilterProvider.setDefaultFilter(SimpleBeanPropertyFilter.serializeAll())); String response = objectMapper.writer().writeValueAsString(result.get(0)); assertThat(JsonPath.parse(response).<Map<String, String>>read("$.response.list[0].headers")).containsOnly(MapEntry.entry("From", "user@domain.tld"), MapEntry.entry("HEADer2", "Header2Content")); }
@Test public void processShouldReturnOneMessageWhenMessageInSeveralMailboxes() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage( AppendCommand.from( org.apache.james.mime4j.dom.Message.Builder.of() .setFrom("user@domain.tld") .setField(new RawField("header1", "Header1Content")) .setField(new RawField("HEADer2", "Header2Content")) .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8)), session); MailboxId customMailboxId = mailboxManager.getMailbox(customMailboxPath, session).getId(); messageIdManager.setInMailboxes(message1.getMessageId(), ImmutableList.of(message1.getMailboxId(), customMailboxId), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message1.getMessageId())) .properties(ImmutableList.of("mailboxIds")) .build(); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result).hasSize(1); Method.Response response = result.get(0).getResponse(); assertThat(response).isInstanceOf(GetMessagesResponse.class); GetMessagesResponse getMessagesResponse = (GetMessagesResponse) response; assertThat(getMessagesResponse.list()).hasSize(1); assertThat(getMessagesResponse.list().get(0).getMailboxIds()).containsOnly(customMailboxId, message1.getMailboxId()); }
@Test @SuppressWarnings("unchecked") public void processShouldFetchHtmlMessage() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message = inbox.appendMessage( AppendCommand.from( org.apache.james.mime4j.dom.Message.Builder.of() .setSubject("message 1 subject") .setBody("my <b>HTML</b> message", "html", StandardCharsets.UTF_8)), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message.getMessageId())) .build(); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result).hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMessagesResponse.class) .extracting(GetMessagesResponse.class::cast) .flatExtracting(GetMessagesResponse::list) .extracting(Message::getId, Message::getHtmlBody) .containsOnly(Tuple.tuple(message.getMessageId(), Optional.of("my <b>HTML</b> message"))); }
@Test @SuppressWarnings("unchecked") public void processShouldReturnEmptyTextBodyAndHtmlBodyWhenThoseAreEmpty() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message = inbox.appendMessage( AppendCommand.from(org.apache.james.mime4j.dom.Message.Builder.of() .setSubject("message 1 subject") .setBody("", "html", StandardCharsets.UTF_8)), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message.getMessageId())) .build(); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result).hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMessagesResponse.class) .extracting(GetMessagesResponse.class::cast) .flatExtracting(GetMessagesResponse::list) .extracting(Message::getId, Message::getTextBody, Message::getHtmlBody) .containsOnly(Tuple.tuple(message.getMessageId(), Optional.empty(), Optional.of(""))); }
@Before public void setup() throws Throwable { jmapServer = createJmapServer(); jmapServer.start(); mailboxProbe = jmapServer.getProbe(MailboxProbeImpl.class); aclProbe = jmapServer.getProbe(ACLProbeImpl.class); quotaProbe = jmapServer.getProbe(QuotaProbesImpl.class); RestAssured.requestSpecification = jmapRequestSpecBuilder .setPort(jmapServer.getProbe(JmapGuiceProbe.class).getJmapPort()) .build(); RestAssured.enableLoggingOfRequestAndResponseIfValidationFails(); DataProbe dataProbe = jmapServer.getProbe(DataProbeImpl.class); dataProbe.addDomain(DOMAIN); dataProbe.addUser(ALICE, ALICE_PASSWORD); dataProbe.addUser(BOB, BOB_PASSWORD); accessToken = authenticateJamesUser(baseUri(jmapServer), ALICE, ALICE_PASSWORD); message = Message.Builder.of() .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build(); }
@Test @SuppressWarnings("unchecked") public void processShouldReturnTextBodyWhenEmptyTextBodyAndNotEmptyHtmlBody() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message = inbox.appendMessage( AppendCommand.from( org.apache.james.mime4j.dom.Message.Builder.of() .setSubject("message 1 subject") .setBody("my <b>HTML</b> message", "html", StandardCharsets.UTF_8)), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message.getMessageId())) .build(); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result).hasSize(1) .extracting(JmapResponse::getResponse) .hasOnlyElementsOfType(GetMessagesResponse.class) .extracting(GetMessagesResponse.class::cast) .flatExtracting(GetMessagesResponse::list) .extracting(Message::getId, Message::getTextBody, Message::getHtmlBody) .containsOnly(Tuple.tuple(message.getMessageId(), Optional.of("my HTML message"), Optional.of("my <b>HTML</b> message"))); }
@Test public void deletingAMailboxShouldPreserveQuotaOfOtherMailboxes() throws Exception { resources.fillMailbox(); mailboxManager.getMailbox(subFolder, session) .appendMessage(MessageManager.AppendCommand.from( Message.Builder.of() .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build()), session); mailboxManager.deleteMailbox(subFolder, session); QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(inbox); Quota<QuotaCount> messageQuota = resources.getQuotaManager().getMessageQuota(quotaRoot); Quota<QuotaSize> storageQuota = resources.getQuotaManager().getStorageQuota(quotaRoot); SoftAssertions.assertSoftly(softly -> { softly.assertThat(messageQuota.getUsed()).isEqualTo(QuotaCount.count(16)); softly.assertThat(storageQuota.getUsed()).isEqualTo(QuotaSize.size(16 * 247)); }); } }
@Before public void init() throws Exception { InMemoryIntegrationResources inMemoryIntegrationResources = new InMemoryIntegrationResources(); GroupMembershipResolver groupMembershipResolver = inMemoryIntegrationResources.createGroupMembershipResolver(); mailboxManager = inMemoryIntegrationResources.createMailboxManager(groupMembershipResolver); mockedMailQueueItem = mock(MailQueueItem.class); mail = FakeMail.defaultFakeMail(); when(mockedMailQueueItem.getMail()).thenReturn(mail); testee = new PostDequeueDecorator(mockedMailQueueItem, mailboxManager, new InMemoryMessageId.Factory(), inMemoryIntegrationResources.createMessageIdManager(mailboxManager), new SystemMailboxesProviderImpl(mailboxManager)); message = Message.Builder.of() .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8) .build(); }
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(); }
public MessageBuilder setSubject(String subject) { builder.setSubject(subject); return this; }
private Message generateMessageContent() throws IOException { return Message.Builder.of() .setSubject("toto") .setBody("content", StandardCharsets.UTF_8) .build(); }
@BeforeEach void setUp() throws Exception { this.mailboxManager = provideMailboxManager(); this.message = Message.Builder.of() .setSubject("test") .setBody("testmail", StandardCharsets.UTF_8); }
private void appendMessage(MailboxPath mailboxPath, int i) throws Exception { mainStepdefs.mailboxProbe.appendMessage(userStepdefs.getConnectedUser(), mailboxPath, MessageManager.AppendCommand.from(Message.Builder.of() .setSubject("test" + i) .setBody("testBody" + i, StandardCharsets.UTF_8) .build())); }