为什么JavaMail BodyPart.getInputStream()在使用IMAP时返回空流,而在使用POP3时不返回空流?

为什么JavaMail BodyPart.getInputStream()在使用IMAP时返回空流,而在使用POP3时不返回空流?,java,inputstream,imap,pop3,jakarta-mail,Java,Inputstream,Imap,Pop3,Jakarta Mail,我有一个javax.mail应用程序,它通过电子邮件解析并获取所有application/*附件的InputStream: private DataInputStream getAttachmentStream(Message message) throws MessagingException, IOException { if (message.isMimeType("multipart/*")) { Multipart mp = (Multipart) messag

我有一个
javax.mail
应用程序,它通过电子邮件解析并获取所有
application/*
附件的
InputStream

private DataInputStream getAttachmentStream(Message message) throws MessagingException, IOException {
    if (message.isMimeType("multipart/*")) {
        Multipart mp = (Multipart) message.getContent();

        for (int p = 0; p < mp.getCount(); p++) {
            BodyPart part = mp.getBodyPart(p);

            if (part.getContentType().toLowerCase().startsWith("application")) {
                InputStream is = part.getInputStream();

                DataInputStream dis = new DataInputStream(is);

                App.logger.info("Found attachment."");
                return dis;
            }
        }
    }

    App.logger.warn("No attachment found.");
    return null;
}
private DataInputStream getAttachmentStream(消息消息)抛出消息异常,IOException{
if(message.isMimeType(“multipart/*”){
Multipart mp=(Multipart)message.getContent();
对于(int p=0;p
我的问题是,即使对于有附件的电子邮件,结果的
DataInputStream
也是空的。我已经在调试器中进行了调试,并且
part
肯定是带有附件的正确
消息
部分


我将检查电子邮件地址的代码的协议切换为使用POP3而不是IMAP,这段代码神奇地工作了。有人能解释一下为什么这段代码适用于POP3而不适用于IMAP吗?

这条线程已经打开了一段时间,但我认为这里描述的问题是由于部分fetch impl中的错误造成的IMAP服务器的修订。如本链接和这些说明中所述。有一种解决方法,请添加以下属性:

props.setProperty(“mail.imap.partialfetch”、“false”)


您是否进入了
getInputStream()
打电话看看它能做什么?不,我没有。我会试试看;谢谢!我只需切换到POP3而不是IMAP就可以让我的代码正常工作。有人能解释为什么在IMAP中这不起作用吗?IMAP允许javamail使用一种更懒惰的消息检索形式,POP强制客户端获取全部或什么都不获取(aaaalmost)。听起来好像javamail还没有获取您希望使用的位。@arnt谢谢!听起来是这样的;有没有指向某些文档或博客帖子的链接来支持它?(您可以将其作为答案发布。):)