3

我开始使用 Java Mail,我有一些关于处理附件的问题:

  1. 如果我们的内容是一个Multipartie有一个附件,那么实际附件在哪个索引处,我们可以在哪个索引处找到消息内容?我只想处理附件。

  2. 这会是一个正确的方法。如果我想将给定的附件转换为字符串,只需读取附件部分的流(使用getStream())并将其附加到字符串生成器,然后返回字符串?

非常感谢任何建议

4

1 回答 1

3

1.)这是来自我的一个应用程序(也基于其他人的代码,但我找不到给予信用)。

如您所见,我正在递归处理一个 Part 对象(首先它实际上是一个消息)。

我删除了一些不相关的代码。

private BodyPartDOM collectBodyParts(Part part) throws IOException, MessagingException {

        BodyPartDOM dom = new BodyPartDOM();

        Object content = part.getContent();

        if (content instanceof String) {

            // process as string

        } else if (content instanceof Multipart) {


            Multipart innerMultiPart = (Multipart) content;
            int count = innerMultiPart.getCount();

            for (int i = 0; i < count; i++) {

                BodyPart innerBodyPart = innerMultiPart.getBodyPart(i);
                BodyPartDOM subDom = collectBodyParts(innerBodyPart);
                // further recursive processing

            }

        } else if (content instanceof InputStream) {

            // process inputStream

        }

        return dom;

    }

2.) 如果您将其转换为字符串,请继续。但请注意例如文件流。

您可以检查内容类型的 MIME 类型。以下是来自维基百科的一些有用信息(http://en.wikipedia.org/wiki/MIME#Content-Type):

Content-Type 该头指示消息内容的互联网媒体类型,由类型和子类型组成,例如

Content-Type: text/plain 通过使用 multipart 类型,MIME 允许消息具有以树结构排列的部分,其中叶节点是任何非多部分内容类型,非叶节点是各种多部分中的任何一个类型。该机制支持:

使用 text/plain(“Content-Type:”的默认值)文本和附件(多部分/与 text/plain 部分和其他非文本部分混合)的简单文本消息。包含附加文件的 MIME 消息通常使用“Content-disposition:”标头指示文件的原始名称,因此文件类型由 MIME 内容类型和(通常是特定于操作系统的)文件扩展名回复与原始附加(多部分/与文本/纯文本部分混合,原始消息作为消息/rfc822 部分)替代内容,例如以纯文本和另一种格式(如 HTML)发送的消息(多部分/替代文本中的相同内容) /plain 和 text/html 形式)图像、音频、视频和应用程序(例如,image/jpeg、audio/mp3、video/mp4、

如何将其付诸实践可以在这里找到: http ://www.oracle.com/technetwork/java/faq-135477.html

快乐编码!

于 2012-08-21T14:29:38.917 回答