为什么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谢谢!听起来是这样的;有没有指向某些文档或博客帖子的链接来支持它?(您可以将其作为答案发布。):)