private static MimeStreamParser getMimeStreamParser() { MimeConfig parserConfig = new MimeConfig.Builder() .setMaxHeaderLen(-1) .setMaxLineLen(-1) .setMaxHeaderCount(-1) .build(); return new MimeStreamParser(parserConfig); }
@Override public void body(BodyDescriptor bd, InputStream inputStream) throws MimeException, IOException { Part part = (Part) stack.peek(); String transferEncoding = bd.getTransferEncoding(); Body body = createBody(inputStream, transferEncoding, fileFactory); part.setBody(body); }
@Override public void field(Field parsedField) throws MimeException { String name = parsedField.getName(); String raw = parsedField.getRaw().toString(); Part part = (Part) stack.peek(); part.addRawHeader(name, raw); String fieldImmediateValue = MimeUtility.getHeaderParameter(parsedField.getBody(), null); if ("Content-Type".equalsIgnoreCase(name) && MimeUtility.isMessage(fieldImmediateValue)) { isMessagePart = true; } if ("Content-Disposition".equalsIgnoreCase(name) && "attachment".equalsIgnoreCase(fieldImmediateValue)) { isContentDispositionAttachment = true; } }
SAXException, TikaException { MimeConfig config = new MimeConfig.Builder() .setMaxLineLen(100000) .setMaxHeaderLen(100000) .build(); xhtml, localDetector, metadata, context, config.isStrictParsing(), extractAllAlternatives); parser.setContentHandler(mch);
submd.set(Metadata.CONTENT_TYPE, body.getMimeType()); submd.set(Metadata.CONTENT_ENCODING, body.getCharset()); submd.set(Message.MULTIPART_SUBTYPE, parts.peek().getSubType()); submd.set(Message.MULTIPART_BOUNDARY, parts.peek().getBoundary());
@Override public void startMultipart(BodyDescriptor bd) throws MimeException { Part part = (Part) stack.peek(); String mimeType = bd.getMimeType(); String boundary = bd.getBoundary(); MimeMultipart multipart = new MimeMultipart(mimeType, boundary); part.setBody(multipart); stack.push(multipart); }
@Override public void body(BodyDescriptor bd, InputStream in) throws IOException, MimeException { expect(Part.class); Body body = bodyFactory.createBody(bd.getTransferEncoding(), bd.getMimeType(), in); ((Part)stack.peek()).setBody(body); }
@Override public void startMultipart(BodyDescriptor descr) throws MimeException { parts.push(descr); if (! extractAllAlternatives) { if (alternativePartBuffer.size() == 0 && MULTIPART_ALTERNATIVE.equalsIgnoreCase(descr.getMimeType())) { Part part = new Part(descr); alternativePartBuffer.push(part); } else if (alternativePartBuffer.size() > 0) { //add the part to the stack Part parent = alternativePartBuffer.peek(); Part part = new Part(descr); alternativePartBuffer.push(part); if (parent != null) { parent.children.add(part); } } } }
MimeEntity( LineNumberSource lineSource, InputStream instream, MimeConfig config, EntityState startState, EntityState endState, BodyDescriptorBuilder bodyDescBuilder) { this(lineSource, instream, config, startState, endState, config.isStrictParsing() ? DecodeMonitor.STRICT : DecodeMonitor.SILENT, new DefaultFieldBuilder(config.getMaxHeaderLen()), bodyDescBuilder); }
public MimeTokenStream( final MimeConfig config, final DecodeMonitor monitor, final FieldBuilder fieldBuilder, final BodyDescriptorBuilder bodyDescBuilder) { super(); this.config = config != null ? config : MimeConfig.DEFAULT; this.fieldBuilder = fieldBuilder != null ? fieldBuilder : new DefaultFieldBuilder(this.config.getMaxHeaderLen()); this.monitor = monitor != null ? monitor : (this.config.isStrictParsing() ? DecodeMonitor.STRICT : DecodeMonitor.SILENT); this.bodyDescBuilder = bodyDescBuilder != null ? bodyDescBuilder : new FallbackBodyDescriptorBuilder(); }
private String stripOutFieldPrefix(Field field, String fieldname) { String temp = field.getRaw().toString(); int loc = fieldname.length(); while (temp.charAt(loc) == ' ') { loc++; } return temp.substring(loc); }
public static MimeBodyPart parse(FileFactory fileFactory, InputStream inputStream) throws MessagingException, IOException { MimeBodyPart parsedRootPart = new MimeBodyPart(); MimeConfig parserConfig = new MimeConfig.Builder() .setMaxHeaderLen(-1) .setMaxLineLen(-1) .setMaxHeaderCount(-1) .build(); MimeStreamParser parser = new MimeStreamParser(parserConfig); parser.setContentHandler(new PartBuilder(parser, fileFactory, parsedRootPart)); parser.setRecurse(); try { parser.parse(new EOLConvertingInputStream(inputStream)); } catch (MimeException e) { throw new MessagingException("Failed to parse decrypted content", e); } return parsedRootPart; }
@Override public void startMultipart(BodyDescriptor bd) throws MimeException { expect(Part.class); Part e = (Part)stack.peek(); String mimeType = bd.getMimeType(); String boundary = bd.getBoundary(); MimeMultipart multiPart = new MimeMultipart(mimeType, boundary); e.setBody(multiPart); stack.addFirst(multiPart); }
private void handleBestParts(Part part) throws MimeException, IOException { if (part == null) { return; } if (part instanceof BodyContents) { handleInlineBodyPart((BodyContents)part); return; } if (MULTIPART_ALTERNATIVE.equalsIgnoreCase(part.bodyDescriptor.getMimeType())) { int bestPartScore = -1; Part bestPart = null; for (Part alternative : part.children) { int score = score(alternative); if (score > bestPartScore) { bestPart = alternative; bestPartScore = score; } } handleBestParts(bestPart); } else { for (Part child : part.children) { handleBestParts(child); } } }
MimeEntity( LineNumberSource lineSource, InputStream instream, MimeConfig config, BodyDescriptorBuilder bodyDescBuilder) { this(lineSource, instream, config, EntityState.T_START_MESSAGE, EntityState.T_END_MESSAGE, config.isStrictParsing() ? DecodeMonitor.STRICT : DecodeMonitor.SILENT, new DefaultFieldBuilder(config.getMaxHeaderLen()), bodyDescBuilder); }
MimeConfig parserConfig = new MimeConfig.Builder() .setMaxHeaderLen(-1) .setMaxLineLen(-1) .setMaxHeaderCount(-1) .build();