@@ -115,9 +115,16 @@ public final class MimeMessageParser {
115115 }
116116
117117 /**
118- * Extracts the content of a MimeMessage recursively .
118+ * Delegates to {@link #parseMimeMessage( MimeMessage, boolean)} .
119119 */
120120 public static ParsedMimeMessageComponents parseMimeMessage (@ NotNull final MimeMessage mimeMessage ) {
121+ return parseMimeMessage (mimeMessage , true );
122+ }
123+
124+ /**
125+ * Extracts the content of a MimeMessage recursively.
126+ */
127+ public static ParsedMimeMessageComponents parseMimeMessage (@ NotNull final MimeMessage mimeMessage , boolean attachmentData ) {
121128 final ParsedMimeMessageComponents parsedComponents = new ParsedMimeMessageComponents ();
122129 parsedComponents .messageId = parseMessageId (mimeMessage );
123130 parsedComponents .sentDate = parseSentDate (mimeMessage );
@@ -127,12 +134,13 @@ public static ParsedMimeMessageComponents parseMimeMessage(@NotNull final MimeMe
127134 parsedComponents .bccAddresses .addAll (parseBccAddresses (mimeMessage ));
128135 parsedComponents .fromAddress = parseFromAddress (mimeMessage );
129136 parsedComponents .replyToAddresses = parseReplyToAddresses (mimeMessage );
130- parseMimePartTree (mimeMessage , parsedComponents );
137+ parseMimePartTree (mimeMessage , parsedComponents , attachmentData );
131138 moveInvalidEmbeddedResourcesToAttachments (parsedComponents );
132139 return parsedComponents ;
133140 }
134141
135- private static void parseMimePartTree (@ NotNull final MimePart currentPart , @ NotNull final ParsedMimeMessageComponents parsedComponents ) {
142+ private static void parseMimePartTree (@ NotNull final MimePart currentPart , @ NotNull final ParsedMimeMessageComponents parsedComponents ,
143+ boolean attachmentData ) {
136144 for (final Header header : retrieveAllHeaders (currentPart )) {
137145 parseHeader (header , parsedComponents );
138146 }
@@ -149,10 +157,10 @@ private static void parseMimePartTree(@NotNull final MimePart currentPart, @NotN
149157 } else if (isMimeType (currentPart , "multipart/*" )) {
150158 final Multipart mp = parseContent (currentPart );
151159 for (int i = 0 , count = countBodyParts (mp ); i < count ; i ++) {
152- parseMimePartTree (getBodyPartAtIndex (mp , i ), parsedComponents );
160+ parseMimePartTree (getBodyPartAtIndex (mp , i ), parsedComponents , attachmentData );
153161 }
154162 } else {
155- final DataSource ds = createDataSource (currentPart );
163+ final DataSource ds = createDataSource (currentPart , attachmentData );
156164 // if the diposition is not provided, for now the part should be treated as inline (later non-embedded inline attachments are moved)
157165 if (Part .ATTACHMENT .equalsIgnoreCase (disposition )) {
158166 parsedComponents .attachmentList .add (new SimpleEntry <>(parseResourceNameOrUnnamed (parseContentID (currentPart ), parseFileName (currentPart )), ds ));
@@ -373,16 +381,22 @@ public static DataHandler retrieveDataHandler(@NotNull final MimePart part) {
373381 * @return the DataSource
374382 */
375383 @ NotNull
376- private static DataSource createDataSource (@ NotNull final MimePart part ) {
384+ private static DataSource createDataSource (@ NotNull final MimePart part , boolean attachmentData ) {
377385 final DataHandler dataHandler = retrieveDataHandler (part );
378386 final DataSource dataSource = dataHandler .getDataSource ();
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 );
383387
384- result .setName (dataSourceName );
385- return result ;
388+ if (attachmentData ) {
389+ final String contentType = parseBaseMimeType (dataSource .getContentType ());
390+ final byte [] content = readContent (retrieveInputStream (dataSource ));
391+ final ByteArrayDataSource result = new ByteArrayDataSource (content , contentType );
392+ final String dataSourceName = parseDataSourceName (part , dataSource );
393+
394+ result .setName (dataSourceName );
395+ return result ;
396+ }
397+ else {
398+ return dataSource ;
399+ }
386400 }
387401
388402 @ SuppressWarnings ("WeakerAccess" )
0 commit comments