SHARE
TWEET

parseMail - MimeMessage to String

a guest Apr 11th, 2011 1,010 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import org.apache.commons.lang.StringUtils;
  2. import org.apache.commons.lang.StringEscapeUtils;
  3.  
  4. import javax.mail.*;
  5. import javax.mail.internet.*;
  6. import java.io.*;
  7.  
  8. public class parseMail
  9. {
  10.     public static String fetchText(Part message, textInfo ti, boolean escape, boolean showImages)
  11.     {
  12.         StringWriter sw = new StringWriter(1024);
  13.         boolean html = false;
  14.        
  15.         try{
  16.             if(message != null && message.getContent() != null){
  17.                 if(message.getContent() instanceof Multipart){
  18.                     Multipart parts = (Multipart)message.getContent();
  19.                     BodyPart p;
  20.                     boolean attachment = false;
  21.                     boolean alternative = parts.getContentType().trim().toLowerCase().startsWith("multipart/alternative") ? true : false;
  22.                    
  23.                     InputStreamReader isr;
  24.                     int available, retrieved;
  25.                     char[] buffer = new char[512];
  26.                     for(int i=0;i<parts.getCount();i++){
  27.                         p = parts.getBodyPart(i);
  28.                        
  29.                         if(p.getContentType().toLowerCase().startsWith("multipart")){
  30.                             sw.write(fetchText(p, ti, escape, showImages));
  31.                             break;
  32.                         }else if((Part.INLINE.equalsIgnoreCase(p.getDisposition())
  33.                                   || p.getDisposition() == null)
  34.                                  && p.getContentType().toLowerCase().startsWith("text") &&
  35.                                  p.getFileName() == null){
  36.                            
  37.                             if(InputStream.class.isInstance(p.getContent())){
  38.                                 InputStream ip = p.getInputStream();
  39.                                
  40.                                 StringWriter subwriter = new StringWriter(ip.available());
  41.                                 isr = new InputStreamReader(ip);
  42.                                 while(isr.ready()){
  43.                                     retrieved = isr.read(buffer, 0, 512);
  44.                                     subwriter.write(buffer, 0, retrieved);
  45.                                 }
  46.                                
  47.                                 if(escape){
  48.                                     sw.write(escapeLineBreaksAndSpacesForHTML(subwriter.toString()));
  49.                                 }else{
  50.                                     sw.write(subwriter.toString());
  51.                                 }
  52.                             }else{
  53.                                 Object content = p.getContent();
  54.                                 if(escape){
  55.                                     if(java.io.ByteArrayInputStream.class.isInstance(content)){
  56.                                         int bcount = ((java.io.ByteArrayInputStream)content).available();
  57.                                         byte[] c = new byte[bcount];
  58.                                         ((java.io.ByteArrayInputStream)content).read(c, 0, bcount);
  59.                                         sw.write(escapeLineBreaksAndSpacesForHTML(new String(c)));
  60.                                     }else{
  61.                                         sw.write(escapeLineBreaksAndSpacesForHTML(content.toString()));
  62.                                     }
  63.                                 }else{
  64.                                     if(java.io.ByteArrayInputStream.class.isInstance(content)){
  65.                                         int bcount = ((java.io.ByteArrayInputStream)content).available();
  66.                                         byte[] c = new byte[bcount];
  67.                                         ((java.io.ByteArrayInputStream)content).read(c, 0, bcount);
  68.                                         sw.write(new String(c));
  69.                                     }else{
  70.                                         sw.write(content.toString());
  71.                                     }
  72.                                 }
  73.                             }
  74.                            
  75.                             if(p.getContentType().toLowerCase().indexOf("html") > 0) html = true;
  76.                             if(alternative && !"".equals(sw.toString().trim())){
  77.                                 break;
  78.                             }
  79.                             if(escape){
  80.                                 sw.write("<br/>");
  81.                             }else{
  82.                                 sw.write("\r\n");
  83.                             }
  84.                         }else if(p.getContentType().toLowerCase().startsWith("image") && showImages && !html){
  85.                             // inline image
  86.                             if(escape && message instanceof MimeMessage){
  87.                                 sw.write("<br/>");
  88.                                 sw.write("<img src=\"");
  89.                                 sw.write(String.valueOf(i));
  90.                                 sw.write("\"><br/>\r\n");
  91.                             }
  92.                         }
  93.                     }
  94.                 }else if(message.getContentType().toLowerCase().startsWith("text")){
  95.                     if(escape){
  96.                         Object content = message.getContent();
  97.                         if(java.io.ByteArrayInputStream.class.isInstance(content)){
  98.                             int bcount = ((java.io.ByteArrayInputStream)content).available();
  99.                             byte[] c = new byte[bcount];
  100.                             ((java.io.ByteArrayInputStream)content).read(c, 0, bcount);
  101.                             sw.write(escapeLineBreaksAndSpacesForHTML(new String(c)));
  102.                         }else{
  103.                             sw.write(escapeLineBreaksAndSpacesForHTML(content.toString()));
  104.                         }
  105.                     }else{
  106.                         sw.write(message.getContent().toString());
  107.                     }
  108.                    
  109.                 }
  110.             }else{
  111.                 System.err.println("Message or message content is null");
  112.             }
  113.         }catch(Exception ioe){
  114.             System.err.println("Exception reading mail: " + ioe.getMessage());
  115.             ioe.printStackTrace();
  116.         }
  117.         if(ti != null) ti.html = html;
  118.         return sw.toString();
  119.     }
  120.  
  121.     public static String escapeOutputForHTML(String value)
  122.     {
  123.         if(value != null && (value.indexOf('\n') >= 0 || value.indexOf('\r') >= 0)){
  124.             return join(StringEscapeUtils.escapeHtml(value).split("\r\n|\r|\n"), "<br/>\r\n", true);
  125.         }
  126.         return StringEscapeUtils.escapeHtml(value);
  127.     }
  128.  
  129.     public static String escapeLineBreaksForHTML(String value)
  130.     {
  131.         if(value != null && (value.indexOf('\n') >= 0 || value.indexOf('\r') >= 0)){
  132.             return join(value.split("\r\n|\r|\n"), "<br/>\r\n", true);
  133.         }
  134.  
  135.         return value;
  136.     }
  137.  
  138.     public static String join(String[] source, String filler, boolean includeEmptyStrings)
  139.     {
  140.         if(source == null) return "";
  141.         if(filler == null) filler = "";
  142.        
  143.         int i, size = 0;
  144.         for(i=0;i<source.length;i++){
  145.             if(source[i] != null){
  146.                 if(i > 0) size += filler.length();
  147.                 size += source[i].length();
  148.             }
  149.         }
  150.        
  151.         //StringBuffer sb = new StringBuffer(size);
  152.         StringBuilder sb = new StringBuilder(size);
  153.         for(i=0;i<source.length;i++){
  154.             if(source[i] != null && !"".equals(source)){
  155.                 sb.append(source[i]);
  156.                 sb.append(filler);
  157.             }else if(includeEmptyStrings){
  158.                 sb.append(filler);
  159.             }
  160.         }
  161.         return sb.toString();
  162.        
  163.     }
  164.  
  165. public static String escapeLineBreaksAndSpacesForHTML(String value)
  166.     {
  167.         if(value == null) return "";
  168.         String[] lines = value.split("\r\n|\r|\n");
  169.         StringBuilder tb = new StringBuilder(value.length()+5*lines.length);
  170.         int i, j;
  171.         String tline;
  172.         for(i=0;i<lines.length;i++){
  173.             if(i > 0) tb.append("<br/>\r\n");
  174.             tline = StringUtils.stripStart(lines[i], " ");
  175.             j = lines[i].length() - tline.length();
  176.             if(j > 0) tb.append(StringUtils.repeat("&nbsp;", j));
  177.             j = tline.length();
  178.             tline = StringUtils.stripEnd(tline, " ");
  179.             j -= tline.length();
  180.             tb.append(tline);
  181.             if(j > 0) tb.append(StringUtils.repeat("&nbsp;", j));
  182.         }
  183.         return tb.toString();
  184.     }
  185.  
  186.     public static String escapeLineBreaksSpacesAndEntitiesForHTML(String value)
  187.     {
  188.         if(value == null) return "";
  189.         String[] lines = value.split("\r\n|\r|\n");
  190.         StringBuilder tb = new StringBuilder(value.length()+5*lines.length);
  191.         int i, j;
  192.         String tline;
  193.         for(i=0;i<lines.length;i++){
  194.             if(i > 0) tb.append("<br/>\r\n");
  195.             tline = StringUtils.stripStart(lines[i], " ");
  196.             j = lines[i].length() - tline.length();
  197.             if(j > 0) tb.append(StringUtils.repeat("&nbsp;", j));
  198.             j = tline.length();
  199.             tline = StringUtils.stripEnd(tline, " ");
  200.             j -= tline.length();
  201.             //tb.append(StringEscapeUtils.escapeXml(tline));
  202.             tb.append(StringEscapeUtils.escapeXml(tline));
  203.             if(j > 0) tb.append(StringUtils.repeat("&nbsp;", j));
  204.         }
  205.         return tb.toString();
  206.     }
  207.    
  208.     class textInfo{
  209.         boolean html = false;
  210.     }
  211. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top