private static <F extends ParsedField> F parse(FieldParser<F> parser, String fieldName, String fieldBody) { RawField rawField = new RawField(fieldName, fieldBody); return parser.parse(rawField, DecodeMonitor.SILENT); }
private void addHeader(Message.Builder messageBuilder, String fieldName, String value) { FieldParser<UnstructuredField> parser = UnstructuredFieldImpl.PARSER; RawField rawField = new RawField(fieldName, value); messageBuilder.addField(parser.parse(rawField, DecodeMonitor.SILENT)); }
protected RawField getRawField() { if (rawField instanceof RawField) { return ((RawField) rawField); } else { return new RawField(rawField.getName(), rawField.getBody()); } }
private void contentId(BodyPartBuilder builder, MessageAttachment att) { if (att.getCid().isPresent()) { builder.setField(new RawField("Content-ID", att.getCid().get().getValue())); } }
/** * Creates a new empty <code>Message</code>. */ public MessageImpl() { super(); Header header = obtainHeader(); RawField rawField = new RawField(FieldName.MIME_VERSION, "1.0"); header.addField(MimeVersionFieldLenientImpl.PARSER.parse(rawField, DecodeMonitor.SILENT)); }
RawField rawContentType = new RawField("Content-Type", contentType); newContentType = bodyDescBuilder.addField(rawContentType); if (newContentType == null) newContentType = rawContentType;
rawfield = ((RawField) field); } else { rawfield = new RawField(field.getName(), field.getBody());
/** * Parses the sequence of bytes into {@link RawField}. * * @throws MimeException if the input data does not contain a valid MIME field. */ public RawField parseField(final ByteSequence raw) throws MimeException { if (raw == null) { return null; } ParserCursor cursor = new ParserCursor(0, raw.length()); String name = parseToken(raw, cursor, COLON); if (cursor.atEnd()) { throw new MimeException("Invalid MIME field: no name/value separator found: " + raw.toString()); } return new RawField(raw, cursor.getPos(), name, null); }
@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 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 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 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 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); }
.addField(new RawField("Great-Header", "message 3 subject")) .setBody("my message", StandardCharsets.UTF_8) .build();