我有一个javax.mail
应用程序可以解析所有InputStream
个附件的电子邮件并获取application/*
:
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;
}
我的问题是即使对于有附件的电子邮件,结果DataInputStream
也是空的。我已经介入了调试器,part
绝对是附件的正确Message
部分。
我切换了检查电子邮件地址的代码协议,使用POP3而不是IMAP,这段代码神奇地起作用了。谁能解释为什么这个代码适用于POP3而不适用于IMAP?
答案 0 :(得分:2)
自从这个线程被打开已经有一段时间了,但我认为这里描述的问题是由于IMAP服务器的部分获取实现中的错误。如本链接http://www.oracle.com/technetwork/java/faq-135477.html#fetch和这些说明https://javamail.java.net/docs/NOTES.txt中所述。有一种解决方法可以解决它,添加以下属性:
props.setProperty(&#34; mail.imap.partialfetch&#34;,&#34; false&#34;);