diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java index 4b2c6ae17e..641be6b896 100644 --- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java +++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java @@ -575,13 +575,11 @@ private void handleGeneralDates(MAPIMessage msg, Map headers, } } } - //try to overwrite the modified property if the actual LAST_MODIFICATION_TIME property exists. - List timeProp = msg.getMainChunks().getProperties().get(MAPIProperty.LAST_MODIFICATION_TIME); - if (timeProp != null && ! timeProp.isEmpty()) { - Calendar cal = ((PropertyValue.TimePropertyValue)timeProp.get(0)).getValue(); - metadata.set(TikaCoreProperties.MODIFIED, cal); - } - + //Note: PR_LAST_MODIFICATION_TIME is intentionally not used to overwrite dcterms:modified here. + //For a .msg file, that MAPI property reflects when the message's underlying storage was + //last written (e.g. when the item was saved/exported to disk), not when its content was + //actually edited, and can be long after the message was sent/received. It remains available, + //unmodified, as mapi:last-modification-time (see handleMessageInfo/LITERAL_TIME_PROPERTIES). } private void handleBodyChunks(Chunk htmlChunk, Chunk rtfChunk, Chunk textChunk, diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/java/org/apache/tika/parser/microsoft/OutlookParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/java/org/apache/tika/parser/microsoft/OutlookParserTest.java index 9d06f7bf94..041d4d20f2 100644 --- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/java/org/apache/tika/parser/microsoft/OutlookParserTest.java +++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/java/org/apache/tika/parser/microsoft/OutlookParserTest.java @@ -81,6 +81,13 @@ public void testOutlookParsing() throws Exception { // Stored as Thu, 5 Apr 2007 09:26:06 -0700 assertEquals("2007-04-05T16:26:06Z", metadata.get(TikaCoreProperties.CREATED)); + //TIKA-4798: dcterms:modified should reflect the message date, not + //PR_LAST_MODIFICATION_TIME, which for a .msg file records when the file's + //underlying storage was last written (e.g. resaved/exported to disk), and + //can be much later than when the message was actually sent/received. + assertEquals("2007-04-05T16:26:06Z", metadata.get(TikaCoreProperties.MODIFIED)); + assertEquals("2007-10-05T05:37:49Z", metadata.get("mapi:last-modification-time")); + String content = handler.toString(); assertNotContained("Microsoft Outlook Express 6", content); assertNotContained("L'\u00C9quipe Microsoft Outlook Express", content);