javamail:为什么getContent返回文本/普通附件,而不是来自InputStream?

时间:2011-07-27 11:18:20

标签: javamail attachment inputstream plaintext

在尝试从gmail下载带附件的邮件时,我的测试邮件包含一个文本文件作为附件。

附件部分正确返回文本附件内容类型,甚至文件名。但是附件InputStream上的循环条件永远不会为非零。

经过一些试验和错误后,发现text / plain的内容可以使用部件的getContent方法获得(在下面介绍调用的情况下

    att_mbp.getContent() 

返回附加文本文件中的内容)

if (BodyPart.ATTACHMENT.equalsIgnoreCase(att_mbp.getDisposition())) {

                att_mbp.getContentType();

                // process each attachment
                // read the filename
                file = att_mbp.getFileName();

                InputStream stream = att_mbp.getInputStream();

                BufferedInputStream br = new BufferedInputStream(stream);
                BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(file));

                while (br.available() > 0) {
                   // this loop is never executed for text/plain
                    bout.write(br.read());
                }
                bout.flush();
                bout.close();

}

我的问题是 - 为什么text / plain attachment body只能从getContent()获得,而不是来自附加的InputStream实例?

1 个答案:

答案 0 :(得分:0)

确定。我终于弄明白了。

对available()的调用始终返回0。 当我修改它时,代码工作如下

int dataByte;

while( ( dataByte = br.read() ) > 0 ){
  bout.write( dataByte );
}

根据javadoc,InputStream的后代应该覆盖可用。看起来情况并非如此。