1

apache commons メール、具体的には ImageHtmlEmail を使用しています。送信されたすべての電子メールを、送信されるとおりにログに記録したいと考えています。完璧な世界では、すべてのヘッダーやその他の情報を含めて、sendmail に貼り付けることができます。

これは主に、text/html ではなく text/plain として表示されるという問題をトラブルシューティングするためのものですが、システムが送信した内容を正確に記録してログに保存しておくと便利だからです。

つまり、本質的には、夢は ImageHtmlEmail を受け取り、文字列を返す関数です。自分で文字列にレンダリングできることはわかっていますが、実際にキャプチャしたいライブラリ関数で行われていることはすべてバイパスしています。BuildMimeMessage を試してから getMimeMessage を試しましたが、これはおそらく正しい最初のステップだと思いますが、mimemessage を文字列に変換する方法の問題が残ります。

4

1 に答える 1

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

}

于 2015-07-02T07:01:51.357 に答える