簡體   English   中英

從ImageHtmlEmail獲取電子郵件文本

[英]Getting email text from ImageHtmlEmail

我們正在使用apache commons郵件,特別是ImageHtmlEmail。 我們真的很想記錄發送的每封電子郵件-准確地將其發送-在理想情況下,您可以將其粘貼到sendmail中-包括所有標頭和其他信息。

這主要是為了解決我們一直遇到的一些問題,將其顯示為text / plain而不是text / html-也是因為將一個系統發出的確切記錄存儲在我們的日志中會很好。

所以基本上-夢想是,將采取ImageHtmlEmail並返回一個字符串的函數- 因為它會被發送 我知道自己可以將其渲染為字符串,但是隨后我繞過了庫函數中正在執行的操作,而這正是我們真正想要捕獲的。 我嘗試了BuildMimeMessage,然后嘗試了getMimeMessage,我認為這可能是正確的第一步-但這僅使我想到了如何將模仿消息轉換為字符串的問題。

我有一種解決方案-但會喜歡一個更好的解決方案:

/**
 * 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);
    }
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM