@@ -111,9 +111,16 @@ public final class MimeMessageParser {
111111 }
112112
113113 /**
114- * Extracts the content of a MimeMessage recursively .
114+ * Delegates to {@link #parseMimeMessage( MimeMessage, boolean)} .
115115 */
116116 public static ParsedMimeMessageComponents parseMimeMessage (@ NotNull final MimeMessage mimeMessage ) {
117+ return parseMimeMessage (mimeMessage , true );
118+ }
119+
120+ /**
121+ * Extracts the content of a MimeMessage recursively.
122+ */
123+ public static ParsedMimeMessageComponents parseMimeMessage (@ NotNull final MimeMessage mimeMessage , boolean attachmentData ) {
117124 final ParsedMimeMessageComponents parsedComponents = new ParsedMimeMessageComponents ();
118125 parsedComponents .messageId = parseMessageId (mimeMessage );
119126 parsedComponents .sentDate = parseSentDate (mimeMessage );
@@ -123,12 +130,13 @@ public static ParsedMimeMessageComponents parseMimeMessage(@NotNull final MimeMe
123130 parsedComponents .bccAddresses .addAll (parseBccAddresses (mimeMessage ));
124131 parsedComponents .fromAddress = parseFromAddress (mimeMessage );
125132 parsedComponents .replyToAddresses = parseReplyToAddresses (mimeMessage );
126- parseMimePartTree (mimeMessage , parsedComponents );
133+ parseMimePartTree (mimeMessage , parsedComponents , attachmentData );
127134 moveInvalidEmbeddedResourcesToAttachments (parsedComponents );
128135 return parsedComponents ;
129136 }
130137
131- private static void parseMimePartTree (@ NotNull final MimePart currentPart , @ NotNull final ParsedMimeMessageComponents parsedComponents ) {
138+ private static void parseMimePartTree (@ NotNull final MimePart currentPart , @ NotNull final ParsedMimeMessageComponents parsedComponents ,
139+ boolean attachmentData ) {
132140 for (final Header header : retrieveAllHeaders (currentPart )) {
133141 parseHeader (header , parsedComponents );
134142 }
@@ -147,10 +155,10 @@ private static void parseMimePartTree(@NotNull final MimePart currentPart, @NotN
147155 } else if (isMimeType (currentPart , "multipart/*" )) {
148156 final Multipart mp = parseContent (currentPart );
149157 for (int i = 0 , count = countBodyParts (mp ); i < count ; i ++) {
150- parseMimePartTree (getBodyPartAtIndex (mp , i ), parsedComponents );
158+ parseMimePartTree (getBodyPartAtIndex (mp , i ), parsedComponents , attachmentData );
151159 }
152160 } else {
153- final DataSource ds = createDataSource (currentPart );
161+ final DataSource ds = createDataSource (currentPart , attachmentData );
154162 // if the diposition is not provided, for now the part should be treated as inline (later non-embedded inline attachments are moved)
155163 if (Part .ATTACHMENT .equalsIgnoreCase (disposition )) {
156164 parsedComponents .attachmentList .put (parseResourceNameOrUnnamed (parseContentID (currentPart ), parseFileName (currentPart )), ds );
@@ -363,16 +371,22 @@ public static DataHandler retrieveDataHandler(@NotNull final MimePart part) {
363371 * @return the DataSource
364372 */
365373 @ NotNull
366- private static DataSource createDataSource (@ NotNull final MimePart part ) {
374+ private static DataSource createDataSource (@ NotNull final MimePart part , boolean attachmentData ) {
367375 final DataHandler dataHandler = retrieveDataHandler (part );
368376 final DataSource dataSource = dataHandler .getDataSource ();
369- final String contentType = parseBaseMimeType (dataSource .getContentType ());
370- final byte [] content = readContent (retrieveInputStream (dataSource ));
371- final ByteArrayDataSource result = new ByteArrayDataSource (content , contentType );
372- final String dataSourceName = parseDataSourceName (part , dataSource );
373377
374- result .setName (dataSourceName );
375- return result ;
378+ if (attachmentData ) {
379+ final String contentType = parseBaseMimeType (dataSource .getContentType ());
380+ final byte [] content = readContent (retrieveInputStream (dataSource ));
381+ final ByteArrayDataSource result = new ByteArrayDataSource (content , contentType );
382+ final String dataSourceName = parseDataSourceName (part , dataSource );
383+
384+ result .setName (dataSourceName );
385+ return result ;
386+ }
387+ else {
388+ return dataSource ;
389+ }
376390 }
377391
378392 @ SuppressWarnings ("WeakerAccess" )
0 commit comments