2015-07-01 20 views
1

我們使用的是Apache公用郵件,特別是ImageHtmlEmail。我們真的很想記錄每一封發送的郵件 - 完全像發送郵件一樣 - 在完美的世界中,它可以粘貼到sendmail中 - 包含所有標題和其他信息。從ImageHtmlEmail中獲取電子郵件文本

這主要是爲了解決我們一直以text/plain而不是text/html形式出現的一些問題 - 同時也因爲它能很好地記錄系統發出的確切內容我們的日誌。

所以基本上 - 夢是一個函數,將採取ImageHtmlEmail並返回一個字符串 - ,因爲它將被髮送。我知道我可以自己把它渲染成一個字符串,但是我繞過了庫函數中正在做的任何事情,這正是我們真正想要捕獲的。我嘗試了BuildMimeMessage,然後getMimeMessage,我認爲這可能是正確的第一步 - 但這只是給我帶來了如何將一個mimemessage變成一個字符串的問題。

回答

0

我有一個排序的解決方案 - 但會愛一個更好的:

/** 
* add content of this type 
* 
* @param builder 
* @param content 
*/ 
private static void addContent(final StringBuilder builder, final Object content) 
{ 
    try 
    { 
     if (content instanceof MimeMultipart) 
     { 
      final MimeMultipart multi = (MimeMultipart) content; 
      for (int i = 0; i < multi.getCount(); i++) 
      { 
       addContent(builder, ((MimeMultipart) content).getBodyPart(i)); 
      } 
     } 
     else if (content instanceof MimeBodyPart) 
     { 

      final MimeBodyPart message = (MimeBodyPart) content; 
      final Enumeration<?> headers = message.getAllHeaderLines(); 
      while (headers.hasMoreElements()) 
      { 
       final String line = (String) headers.nextElement(); 
       builder.append(line).append("\n"); 
      } 
      addContent(builder, message.getContent()); 
     } 
     else if (content instanceof String) 
     { 
      builder.append((String) content).append("\n"); 
     } 
     else 
     { 
      System.out.println(content.getClass().getName()); 
      throw CommonException.notImplementedYet(); 
     } 
    } 
    catch (final Exception theException) 
    { 
     throw CommonException.insteadOf(theException); 
    } 

} 

/** 
* get a string from an email 
* 
* @param email 
* @return 
*/ 
public static String fromHtmlEmail(final ImageHtmlEmail email) 
{ 
    return fromMimeMessage(email.getMimeMessage()); 
} 

/** 
* @param message 
* @return a string from a mime message 
*/ 
private static String fromMimeMessage(final MimeMessage message) 
{ 
    try 
    { 
     message.saveChanges(); 
     final StringBuilder output = new StringBuilder(); 
     final Enumeration<?> headers = message.getAllHeaderLines(); 
     while (headers.hasMoreElements()) 
     { 
      final String line = (String) headers.nextElement(); 
      output.append(line).append("\n"); 
     } 
     addContent(output, message.getContent()); 
     return output.toString(); 
    } 
    catch (final Exception theException) 
    { 
     throw CommonException.insteadOf(theException); 
    } 
} 

}

相關問題