This class is used to read email content. The email is set by the
setMessage method. The class is basically a simple wrapper for the
Message class and Part class of JavaMail. It is used to facilitate
the reading of the message over the phone.
Source Code
package vx.apps.email; import javax.mail.*; import java.io.*; import java.util.ArrayList; import java.text.SimpleDateFormat; public class EmailMessageReader { public EmailMessageReader() { msg_ = null; } public EmailMessageReader(Message msg) throws IOException, MessagingException { msg_ = msg; setMessage(msg); } public void setMessage(Message msg) throws IOException, MessagingException { msg_ = msg; // parse message exception included files String content = getContent(); if (content == null) { newContent_ = null; oldContent_ = null; } else { int idx = content.indexOf("----- Original Message -----"); newContent_ = content; oldContent_ = null; if (idx != -1) { newContent_ = content.substring(0, idx); oldContent_ = content.substring(idx); } } ArrayList list = collectFiles(); if (list.size() == 0) includes_ = null; else { includes_ = new Part[list.size()]; list.toArray(includes_); } } public String getFrom() throws MessagingException { return getFrom(msg_); } public static String getFrom(Message msg) throws MessagingException { javax.mail.Address[] addrs = msg.getFrom(); if (addrs == null || addrs.length == 0) return null; String str = ""; for (int i = 0; i < addrs.length; i++) { if (i != 0) str += ", "; String text = addrs[i].toString(); str += removeChars(text); } return str; } public String getRecipients() throws MessagingException { return getRecipients(msg_); } public static String getRecipients(Message msg) throws MessagingException { javax.mail.Address[] addrs = msg.getRecipients(Message.RecipientType.TO); if (addrs == null || addrs.length == 0) return null; String str = ""; for (int i = 0; i < addrs.length; i++) { if (i != 0) str += ", "; String text = addrs[i].toString(); str += removeChars(text); } return str; } public String getDate() throws MessagingException { return getDate(msg_); } public static String getDate(Message msg) throws MessagingException { java.util.Date d = msg.getSentDate(); if (d != null) { SimpleDateFormat formatter = new SimpleDateFormat("MMMM d hh:mm aa"); return formatter.format(d); } return null; } public static boolean isMultipart(Part p) throws MessagingException { return p.isMimeType("multipart/*"); } public static boolean isWave(Part p) throws MessagingException { return p.isMimeType("audio/x-wav") || p.isMimeType("audio/wav"); } public static boolean isText(Part p) throws MessagingException { return p.isMimeType("text/plain"); } // return original filename public static String readWaveFile(Part p, File savefile) throws IOException, MessagingException { InputStream is = p.getInputStream(); FileOutputStream fs = new FileOutputStream(savefile); byte[] wavbuf = new byte[256]; int len; while ((len = is.read(wavbuf)) > 0) fs.write(wavbuf, 0, len); fs.close(); return p.getFileName(); } public ArrayList collectFiles() throws IOException, MessagingException { return collectFiles(msg_); } public ArrayList collectFiles(Part p) throws IOException, MessagingException { ArrayList list = new ArrayList(); if (p.getFileName() != null) { list.add(p); return list; } if (isMultipart(p)) { Multipart mp = (Multipart) p.getContent(); for (int i = 0; i < mp.getCount(); i++) list.addAll(collectFiles(mp.getBodyPart(i))); } return list; } public String includeContent() throws IOException, MessagingException { return includeContent(msg_); } public static String includeContent(Part p) throws IOException, MessagingException { StringBuffer buf = new StringBuffer(); if (isMultipart(p)) { Multipart mp = (Multipart) p.getContent(); for (int i = 0; i < mp.getCount(); i++) { buf.append(includeContent(mp.getBodyPart(i))); buf.append("\n"); } } else if (isText(p) && p.getFileName()==null) { BufferedReader br = new BufferedReader( new StringReader((String)p.getContent())); String line; while ((line = br.readLine()) != null) { buf.append(">"); buf.append(line); buf.append("\n"); } } return buf.toString(); } public String getContent() throws IOException, MessagingException { return getContent(msg_); } public static String getContent(Part p) throws IOException, MessagingException { StringBuffer buf = new StringBuffer(); if (isText(p)) { buf.append((String)p.getContent()); } else if (isMultipart(p)) { Multipart mp = (Multipart)p.getContent(); int count = mp.getCount(); for (int i = 0; i < count; i++) { Part pp = mp.getBodyPart(i); if (pp.getFileName() != null) continue; String ppcontent = getContent(pp); if (ppcontent != null) { buf.append(ppcontent); buf.append("\n"); } } } else if (p.isMimeType("message/rfc822")) { String pcontent = getContent((Part)p.getContent()); if (pcontent != null) buf.append(pcontent); } String m = removeChars(buf.toString()); if (m.trim().length() == 0) return null; return m; } public static String[] breakup(String content) { if (content == null) return null; ArrayList list = new ArrayList(); while (content.length() > 0) { if (content.length() < 400) { list.add(content); break; } int i = 320; for (; i < content.length(); i++) { char c = content.charAt(i); if (c == '\n' || i == content.length() - 1 || (c == '.' && content.charAt(i+1) == ' ')) { list.add(content.substring(0, i+1)); content = content.substring(i+1); break; } } } String[] cts = new String[list.size()]; list.toArray(cts); return cts; } public String getNewContent() { return newContent_; } public String getOldContent() { return oldContent_; } public Part getIncludeFile(int index) { if (includes_ == null) return null; if (index >= includes_.length || index < 0) return null; return includes_[index]; } public int numIncludeFiles() { if (includes_ == null) return 0; return includes_.length; } public static String filterChars(String text) { if (text == null) return null; StringBuffer buf = new StringBuffer(); for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); if (c == '<') buf.append(" less than "); else if (c == '>') buf.append(" greater than "); else if (c == '\'' || c == '\"') buf.append(" quote "); else if (c == '&') buf.append(" and "); else buf.append(c); } return buf.toString(); } public static String removeChars(String text) { if (text == null) return null; StringBuffer buf = new StringBuffer(); for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); if (c == '<' || c == '>' || c == '\'' || c == '\"' || c == '&') buf.append(' '); else buf.append(c); } return buf.toString(); } protected Message msg_ = null; protected String newContent_ = null; protected String oldContent_ = null; protected Part[] includes_ = null; }