There is example how to use mime4j lib. See comments below.
package com.mozgoweb.mail.test; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import org.apache.james.mime4j.message.BinaryBody; import org.apache.james.mime4j.message.BodyPart; import org.apache.james.mime4j.message.Entity; import org.apache.james.mime4j.message.Message; import org.apache.james.mime4j.message.Multipart; import org.apache.james.mime4j.message.TextBody; import org.apache.james.mime4j.parser.Field; /** * * @author Denis Lunev <den@mozgoweb.com> */ public class TestParser { private StringBuffer txtBody; private StringBuffer htmlBody; private ArrayList<BodyPart> attachments; /** * * @param fileName */ public void parseMessage(String fileName) { FileInputStream fis = null; txtBody = new StringBuffer(); htmlBody = new StringBuffer(); attachments<BodyPart> = new ArrayList(); try { //Get stream from file fis = new FileInputStream(fileName); //Create message with stream from file //If you want to parse String, you can use: //Message mimeMsg = new Message(new ByteArrayInputStream(mimeSource.getBytes())); Message mimeMsg = new Message(fis); //Get some standard headers System.out.println("To: " + mimeMsg.getTo().toString()); System.out.println("From: " + mimeMsg.getFrom().toString()); System.out.println("Subject: " + mimeMsg.getSubject()); //Get custom header by name Field priorityFld = mimeMsg.getHeader().getField("X-Priority"); //If header doesn't found it returns null if (priorityFld != null) { //Print header value System.out.println("Priority: " + priorityFld.getBody()); } //If message contains many parts - parse all parts if (mimeMsg.isMultipart()) { Multipart multipart = (Multipart) mimeMsg.getBody(); parseBodyParts(multipart); } else { //If it's single part message, just get text body String text = getTxtPart(mimeMsg); txtBody.append(text); } //Print text and HTML bodies System.out.println("Text body: " + txtBody.toString()); System.out.println("Html body: " + htmlBody.toString()); for (BodyPart attach : attachments) { String attName = attach.getFilename(); //Create file with specified name FileOutputStream fos = new FileOutputStream(attName); try { //Get attach stream, write it to file BinaryBody bb = (BinaryBody) attach.getBody(); bb.writeTo(fos); } finally { fos.close(); } } } catch (IOException ex) { ex.fillInStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (IOException ex) { ex.printStackTrace(); } } } } /** * This method classifies bodyPart as text, html or attached file * * @param multipart * @throws IOException */ private void parseBodyParts(Multipart multipart) throws IOException { for (BodyPart part : multipart.getBodyParts()) { if (part.isMimeType("text/plain")) { String txt = getTxtPart(part); txtBody.append(txt); } else if (part.isMimeType("text/html")) { String html = getTxtPart(part); htmlBody.append(html); } else if (part.getDispositionType() != null && !part.getDispositionType().equals("")) { //If DispositionType is null or empty, it means that it's multipart, not attached file attachments.add(part); } //If current part contains other, parse it again by recursion if (part.isMultipart()) { parseBodyParts((Multipart) part.getBody()); } } } /** * * @param part * @return * @throws IOException */ private String getTxtPart(Entity part) throws IOException { //Get content from body TextBody tb = (TextBody) part.getBody(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); tb.writeTo(baos); return new String(baos.toByteArray()); } /** * * @param args */ public static void main(String[] args) { String eml = "message.eml"; TestParser parser = new TestParser(); parser.parseMessage(eml); } }
0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.