【问题标题】:Getting email text from ImageHtmlEmail从 ImageHtmlEmail 获取电子邮件文本
【发布时间】:2015-09-19 07:37:38
【问题描述】:

我们使用的是 apache commons mail,特别是 ImageHtmlEmail。我们真的很想记录每封发送的电子邮件 - 与发送时完全相同 - 在完美的世界中,您可以将其粘贴到 sendmail 中 - 包括所有标题和其他信息。

这主要是为了解决我们一直遇到的一些问题,因为它显示为 text/plain 而不是 text/html - 但也因为能够准确记录系统发送的内容并存储在我们的日志。

所以本质上 - 梦想是一个函数,它将接受一个 ImageHtmlEmail 并返回一个字符串 - 因为它将被发送。我知道我可以自己将它渲染成一个字符串,但是我绕过了库函数中正在执行的任何操作,这是我们真正想要捕获的。我尝试了 BuildMimeMessage,然后尝试了 getMimeMessage,我认为这可能是正确的第一步 - 但这给我留下了如何将 mimemessage 转换为字符串的问题。

【问题讨论】:

    标签: java email apache-commons apache-commons-email


    【解决方案1】:

    我有一种解决方案 - 但希望有更好的解决方案:

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

    }

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多