在尝试从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实例?
答案 0 :(得分:0)
确定。我终于弄明白了。
对available()的调用始终返回0。 当我修改它时,代码工作如下
int dataByte;
while( ( dataByte = br.read() ) > 0 ){
bout.write( dataByte );
}
根据javadoc,InputStream的后代应该覆盖可用。看起来情况并非如此。