private ContentTypeField getContentTypeField() { return (ContentTypeField) getHeader().getField(FieldName.CONTENT_TYPE); }
/** * Creates a new <code>Header</code> from the specified * <code>Header</code>. The <code>Header</code> instance is initialized * with a copy of the list of {@link Field}s of the specified * <code>Header</code>. The <code>Field</code> objects are not copied * because they are immutable and can safely be shared between headers. * * @param other * header to copy. */ public AbstractHeader(Header other) { for (Field otherField : other.getFields()) { addField(otherField); } }
public void field(Field field) throws MimeException { expect(Header.class); ((Header) stack.peek()).addField(field); }
private Optional<Mailbox> getAddressForHeader(Message originalMessage, String fieldName) { return Optional.ofNullable(originalMessage.getHeader() .getFields(fieldName)) .orElse(ImmutableList.of()) .stream() .map(field -> AddressListFieldLenientImpl.PARSER.parse(field, new DecodeMonitor())) .findFirst() .map(AddressListField::getAddressList) .map(AddressList::flatten) .map(MailboxList::stream) .orElse(Stream.of()) .findFirst(); }
/** * Obtains the header field with the specified name. * * @param <F> * concrete field type. * @param fieldName * name of the field to retrieve. * @return the header field or <code>null</code> if this entity has no * header or the header contains no such field. */ <F extends ParsedField> F obtainField(String fieldName) { Header header = getHeader(); if (header == null) return null; return (F) header.getField(fieldName); }
/** * @see org.apache.james.mime4j.parser.AbstractContentHandler#field(Field) */ @Override public final void field(Field field) throws MimeException { ParsedField parsedField; if (field instanceof ParsedField) { parsedField = (ParsedField) field; } else { parsedField = fieldParser.parse(field, monitor); } currHeader.addField(parsedField); }
/** * @see org.apache.james.jdkim.api.Headers#getFields() */ public List<String> getFields() { List<Field> res = message.getHeader().getFields(); return convertFields(res); }
private ContentTypeField getContentType(Multipart multipart) { Entity parent = multipart.getParent(); if (parent == null) throw new IllegalArgumentException( "Missing parent entity in multipart"); Header header = parent.getHeader(); if (header == null) throw new IllegalArgumentException( "Missing header in parent entity"); ContentTypeField contentType = (ContentTypeField) header .getField(FieldName.CONTENT_TYPE); if (contentType == null) throw new IllegalArgumentException( "Content-Type field not specified"); return contentType; }
/** * 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)); }
/** * @see org.apache.james.jdkim.api.Headers#getFields(java.lang.String) */ public List<String> getFields(final String name) { return convertFields(message.getHeader().getFields(name)); }
private boolean isInlinedWithoutCid(Entity part) { return Objects.equals(part.getDispositionType(), MimeMessage.INLINE) && part.getHeader().getField(CONTENT_ID) == null; }
/** * Creates a new <code>Header</code> from the specified * <code>Header</code>. The <code>Header</code> instance is initialized * with a copy of the list of {@link Field}s of the specified * <code>Header</code>. The <code>Field</code> objects are not copied * because they are immutable and can safely be shared between headers. * * @param other * header to copy. */ public Header copy(Header other) { HeaderImpl copy = new HeaderImpl(); for (Field otherField : other.getFields()) { copy.addField(otherField); } return copy; }
private boolean isInlinedWithoutCid(Entity part) { return Objects.equals(part.getDispositionType(), MimeMessage.INLINE) && part.getHeader().getField(CONTENT_ID) == null; }
/** * Create a node given a Multipart body. * Add the Preamble, all Body parts and the Epilogue to the node. * * @return the root node of the tree. */ private DefaultMutableTreeNode createNode(Header header) { DefaultMutableTreeNode node = new DefaultMutableTreeNode( new ObjectWrapper("Header", header)); for (Field field : header.getFields()) { String name = field.getName(); node.add(new DefaultMutableTreeNode(new ObjectWrapper(name, field))); } return node; }
private boolean isInlinedWithoutCid(Entity part) { return Objects.equals(part.getDispositionType(), MimeMessage.INLINE) && part.getHeader().getField(CONTENT_ID) == null; }
/** Process a multipart body part */ private boolean processMultipart(JCas jCas, Multipart mp, String sourceUri) throws IOException { boolean doneBody = false; for (Entity e : mp.getBodyParts()) { if (e.getFilename() != null) { // Part has a filename, and is therefore an attachment String extension = FilenameUtils.getExtension(e.getFilename()).toLowerCase(); if (ignoreExtensionsList.contains(extension)) { getMonitor().info("Skipping attachment {}", e.getFilename()); continue; } attachments.put(sourceUri + "/" + e.getFilename(), e.getBody()); } else if (!doneBody) { // Part has no filename, and we've not already processed a part to use as a body processBody(jCas, e.getBody(), sourceUri); // Add metadata for (Field f : e.getParent().getHeader().getFields()) { addMetadata(jCas, f.getName(), f.getBody()); } doneBody = true; } } return doneBody; }
/** * Determines the transfer encoding of this <code>Entity</code>. * * @return the transfer encoding. */ public String getContentTransferEncoding() { ContentTransferEncodingField f = (ContentTransferEncodingField) getHeader().getField(FieldName.CONTENT_TRANSFER_ENCODING); return calcTransferEncoding(f); }
/** Process a multipart body part */ private boolean processMultipart(JCas jCas, Multipart mp, String sourceUri) throws IOException { boolean doneBody = false; for (Entity e : mp.getBodyParts()) { if (e.getFilename() != null) { // Part has a filename, and is therefore an attachment String extension = FilenameUtils.getExtension(e.getFilename()).toLowerCase(); if (ignoreExtensionsList.contains(extension)) { getMonitor().info("Skipping attachment {}", e.getFilename()); continue; } attachments.put(sourceUri + "/" + e.getFilename(), e.getBody()); } else if (!doneBody) { // Part has no filename, and we've not already processed a part to use as a body processBody(jCas, e.getBody(), sourceUri); // Add metadata for (Field f : e.getParent().getHeader().getFields()) { addMetadata(jCas, f.getName(), f.getBody()); } doneBody = true; } } return doneBody; }
/** * Determines the MIME character set encoding of this <code>Entity</code>. * * @return the MIME character set encoding. */ public String getCharset() { return calcCharset((ContentTypeField) getHeader().getField(FieldName.CONTENT_TYPE)); }
@Test public void convertToMimeShouldGenerateMessageIdContainingSenderDomain() { // Given MIMEMessageConverter sut = new MIMEMessageConverter(); CreationMessage message = CreationMessage.builder() .from(DraftEmailer.builder().email("email@domain.com").build()) .mailboxIds(ImmutableList.of("dead-beef-1337")) .subject("subject") .build(); // When Message result = sut.convertToMime(new ValueWithId.CreationMessageEntry( CreationMessageId.of("user|mailbox|1"), message), ImmutableList.of()); // Then assertThat(result.getHeader().getFields("Message-ID")).hasSize(1); assertThat(result.getHeader().getFields("Message-ID").get(0).getBody()) .contains("@domain.com"); }