This is an automated email from the ASF dual-hosted git repository.

tballison pushed a commit to branch branch_3x
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/branch_3x by this push:
     new a7b9b98b5e TIKA-4959: use the Date: transport header when a .msg has 
no MAPI date (backport of #3310) (#3505)
a7b9b98b5e is described below

commit a7b9b98b5e418d228418785ef37952db43ca5ad5
Author: Tim Allison <[email protected]>
AuthorDate: Mon Nov 2 12:31:14 2026 -0500

    TIKA-4959: use the Date: transport header when a .msg has no MAPI date 
(backport of #3310) (#3505)
---
 CHANGES.txt                                           |   4 ++++
 .../tika/parser/microsoft/OutlookExtractor.java       |   6 +++---
 .../tika/parser/microsoft/OutlookParserTest.java      |  18 ++++++++++++++++++
 .../test-documents/testMSG_dateHeaderOnly.msg         | Bin 0 -> 19968 bytes
 .../test-documents/testMSG_dateHeaderUnparseable.msg  | Bin 0 -> 19968 bytes
 5 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 0a30d3f4b8..17a5a7a84e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,9 @@
 Release 3.4.0 - ???
 
+  * The Outlook .msg parser falls back to the Date: transport header when a 
message has
+    no MAPI date; the header was never matched, so such messages had no 
created or
+    modified date (TIKA-4959).
+    
   * The text/html magic now requires the html tag to end, so an XML file with 
an
     element such as <htmlPath> in its first 8K is no longer detected as HTML 
and sent
     to the HTML parser (TIKA-4962).
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 912e8d2585..2e64fd0865 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
@@ -437,9 +437,9 @@ public class OutlookExtractor extends 
AbstractPOIFSExtractor {
         } else {
             if (headers != null && headers.size() > 0) {
                 for (Map.Entry<String, String[]> header : headers.entrySet()) {
-                    String headerKey = header.getKey();
-                    if 
(headerKey.toLowerCase(Locale.ROOT).startsWith("date:")) {
-                        String date = 
headerKey.substring(headerKey.indexOf(':') + 1).trim();
+                    String[] values = header.getValue();
+                    if (header.getKey().equalsIgnoreCase("date") && 
values.length > 0) {
+                        String date = values[0];
 
                         // See if we can parse it as a normal mail date
                         try {
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 f6b03aa27b..4502c949e7 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
@@ -17,6 +17,7 @@
 package org.apache.tika.parser.microsoft;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.InputStream;
@@ -52,6 +53,23 @@ import org.apache.tika.utils.XMLReaderUtils;
  */
 public class OutlookParserTest extends TikaTest {
 
+    @Test
+    public void testDateFromTransportHeader() throws Exception {
+        //TIKA-4959: test-outlook.msg with the MAPI date properties removed;
+        //only the "Date:" transport header remains
+        Metadata metadata = getXML("testMSG_dateHeaderOnly.msg").metadata;
+        assertNull(metadata.get("mapi:last-modification-time"));
+        assertEquals("2007-04-05T16:26:06Z", 
metadata.get(TikaCoreProperties.CREATED));
+        assertEquals("2007-04-05T16:26:06Z", 
metadata.get(TikaCoreProperties.MODIFIED));
+
+        //same file, Date: header replaced with a non-date: no fallback value 
at all
+        metadata = getXML("testMSG_dateHeaderUnparseable.msg").metadata;
+        assertEquals("not a date at all, sorry, nope",
+                metadata.get(Metadata.MESSAGE_RAW_HEADER_PREFIX + "Date"));
+        assertNull(metadata.get(TikaCoreProperties.CREATED));
+        assertNull(metadata.get(TikaCoreProperties.MODIFIED));
+    }
+
     @Test
     public void testOutlookParsing() throws Exception {
 
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/resources/test-documents/testMSG_dateHeaderOnly.msg
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/resources/test-documents/testMSG_dateHeaderOnly.msg
new file mode 100644
index 0000000000..da623857ec
Binary files /dev/null and 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/resources/test-documents/testMSG_dateHeaderOnly.msg
 differ
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/resources/test-documents/testMSG_dateHeaderUnparseable.msg
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/resources/test-documents/testMSG_dateHeaderUnparseable.msg
new file mode 100644
index 0000000000..c4276dea5f
Binary files /dev/null and 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/resources/test-documents/testMSG_dateHeaderUnparseable.msg
 differ

Reply via email to