import org.apache.poi.POIOLE2TextExtractor;
import org.apache.poi.hsmf.MAPIMessage;
import org.apache.poi.hsmf.datatypes.AttachmentChunks;
+import org.apache.poi.hsmf.datatypes.StringChunk;
import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
new NPOIFSFileSystem(new File(filename))
);
System.out.println( extractor.getText() );
+ extractor.close();
}
}
// Display attachment names
// To get the attachments, use ExtractorFactory
for(AttachmentChunks att : msg.getAttachmentFiles()) {
- String ats = att.attachLongFileName.getValue();
+ StringChunk name = att.attachLongFileName;
+ if (name == null) name = att.attachFileName;
+ String attName = name.getValue();
+
if(att.attachMimeTag != null &&
att.attachMimeTag.getValue() != null) {
- ats = att.attachMimeTag.getValue() + " = " + ats;
+ attName = att.attachMimeTag.getValue() + " = " + attName;
}
- s.append("Attachment: " + ats + "\n");
+ s.append("Attachment: " + attName + "\n");
}
try {
ext.close();
}
+ public void testWithAttachedMessage() throws Exception {
+ POIFSFileSystem simple = new POIFSFileSystem(
+ new FileInputStream(samples.getFile("58214_with_attachment.msg"))
+ );
+ MAPIMessage msg = new MAPIMessage(simple);
+ OutlookTextExtactor ext = new OutlookTextExtactor(msg);
+ String text = ext.getText();
+
+ // Check we got bits from the main message
+ assertContains(text, "Master mail");
+ assertContains(text, "ante in lacinia euismod");
+
+ // But not the attached message
+ assertNotContained(text, "Test mail attachment");
+ assertNotContained(text, "Lorem ipsum dolor sit");
+
+ ext.close();
+ }
+
public void testEncodings() throws Exception {
POIFSFileSystem simple = new POIFSFileSystem(
new FileInputStream(samples.getFile("chinese-traditional.msg"))
haystack.contains(needle)
);
}
+ public static void assertNotContained(String haystack, String needle) {
+ assertFalse(
+ "Unexpectedly found text '" + needle + "' in text:\n" + haystack,
+ haystack.contains(needle)
+ );
+ }
public static <T> void assertEquals(T[] expected, T[] actual)
{