Java Mail - 将附件作为String读入

时间:2012-08-21 11:43:46

标签: java email javamail

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

  1. 如果我们的内容是Multipart,即有附件,那么索引是实际的附件,我们可以在哪个位置查找邮件内容?我只想处理附件。

  2. 这是一种正确的方法吗?如果我想将给定的附件转换为String,只需读取附件部分的流(使用getStream())并将其附加到String builder,然后返回一个String?

  3. 非常感谢任何建议

1 个答案:

答案 0 :(得分:2)

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。)如果你把它转换为String继续。但请注意文件流。例如。

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

  

Content-Type此标头表示Internet的媒体类型   消息内容,由类型和子类型组成,例如

     

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

     

使用text / plain的简单文本消息(默认值为   “内容类型:”)文字加附件(多部分/混合使用   文本/普通部分和其他非文本部分)。包含的MIME消息   附件通常用文件表示文件的原始名称   “Content-disposition:”标题,因此两者都指示文件类型   通过MIME内容类型和(通常是特定于操作系统的)文件名   附加原件的扩展回复(multipart / mixed with a   text / plain part和原始消息作为消息/ rfc822部分)   替代内容,例如以纯文本和   另一种格式,如HTML(multipart / alternative with same   文本/纯文本和文本/ html表单中的内容)图像,音频,视频和   应用程序(例如,image / jpeg,audio / mp3,video / mp4和   application / msword等等)许多其他消息构造

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

快乐的编码!