You read them with Javamail easily, see this HowTo.
But Outlook (not the Express but the one with Office) can only save an email with the MSG format which is Microsoft specific.
HSMF is the POI Project's pure Java implementation of the Outlook MSG format.
This example takes a MSG file and extracts the attachment(s).
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Map;
import org.apache.poi.hsmf.MAPIMessage;
import org.apache.poi.hsmf.datatypes.AttachmentChunks;
import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
// You need poi-scratchpad-3.6 and poi-3.6 ( http://poi.apache.org/ )
public class DetectMSGAttachment {
public static void main (String ... args) throws IOException {
String msgfile = "c:/temp/messagewithattachment.msg";
MAPIMessage msg = new MAPIMessage(msgfile);
Map attachmentMap = msg.getAttachmentFiles();
if(attachmentMap.size() > 0) {
for (Iterator ii = attachmentMap.entrySet().iterator(); ii.hasNext();) {
Map.Entry entry = (Map.Entry)ii.next();
String attachmentfilename = entry.getKey().toString();
System.out.println(attachmentfilename);
// extract attachment
ByteArrayInputStream fileIn = (ByteArrayInputStream)entry.getValue();
File f = new File("c:/temp", attachmentfilename); // output
OutputStream fileOut = null;
try {
fileOut = new FileOutputStream(f);
byte[] buffer = new byte[2048];
int bNum = fileIn.read(buffer);
while(bNum > 0) {
fileOut.write(buffer);
bNum = fileIn.read(buffer);
}
}
finally {
try {
if(fileIn != null) {
fileIn.close();
}
}
finally {
if(fileOut != null) {
fileOut.close();
}
}
}
}
}
else {
System.out.println("No attachment");
}
}
}
msgparser is a small open source Java library that parses Outlook .msg files and provides their content using Java objects. msgparser uses the Apache POI - POIFS library to parse the message files which use the OLE 2 Compound Document format.
import java.util.List;
import com.auxilii.msgparser.*;
import com.auxilii.msgparser.attachment.*;
public class SimpleMsgParser {
public static void main(String[] args) throws Exception{
MsgParser msgp = new MsgParser();
Message msg = msgp.parseMsg("c:/temp/test2.msg");
String fromEmail = msg.getFromEmail();
String fromName = msg.getFromName();
String subject = msg.getSubject();
String body = msg.getBodyText();
System.out.println("From :" + fromName + " <" + fromEmail + ">");
System.out.println("Subject :" + subject);
System.out.println("");
System.out.println(body);
System.out.println("");
List atts = msg.getAttachments();
for (Attachment att : atts) {
if (att instanceof FileAttachment) {
FileAttachment file = (FileAttachment) att;
System.out.println("Attachment : " + file.getFilename());
// you get the actual attachment with
// byte date[] = file.getData();
}
}
}
}
The jmbox project (read jambox) is a Local Store Provider for JavaMail, enabling developers to use JavaMail api to manage the mail stored in local repositories like Outlook Express, Mozilla, Netscape etc.
At the moment are supported navigation and reading from Outlook Express 5/6 mail (dbx format).
Written and compiled by Réal Gagnon ©1998-2012
[ home ]