Advertisement
Guest User

parseMail - MimeMessage to String

a guest
Apr 11th, 2011
1,358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.67 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement