【问题标题】:Java Mail - read in the attachment as StringJava Mail - 在附件中读取为字符串
【发布时间】:2012-08-22 03:46:21
【问题描述】:

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

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

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

非常感谢您的建议

【问题讨论】:

    标签: java email jakarta-mail


    【解决方案1】:

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

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

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

    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 此标头指示网络的 Internet 媒体类型 消息内容,由类型和子类型组成,例如

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

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

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

    编码愉快!

    【讨论】:

    • 好的,但是您如何区分附件,例如可能是 csv 文件?
    • @dbalakirev 能否为流程 inputStream 部分添加一些代码示例?
    猜你喜欢
    • 2014-05-13
    • 2011-12-09
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2013-01-25
    • 2021-05-13
    相关资源
    最近更新 更多