我开始使用Java Mail,我有一些关于附件处理的问题:
如果我们的内容是Multipart
,即有附件,那么索引是实际的附件,我们可以在哪个位置查找邮件内容?我只想处理附件。
这是一种正确的方法吗?如果我想将给定的附件转换为String,只需读取附件部分的流(使用getStream()
)并将其附加到String builder,然后返回一个String?
非常感谢任何建议
答案 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
快乐的编码!