gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:45:34 28 4
gpt4 key购买 nike

我有一个 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;
}

我的问题是,即使对于带有附件的电子邮件,生成的 DataInputStream 也是空的。我已在调试器中单步执行,并且 part 绝对是带有附件的正确 Message 部分。

我将检查电子邮件地址的代码协议(protocol)切换为使用 POP3 而不是 IMAP,并且该代码神奇地工作了。谁能解释为什么这段代码适用于 POP3 而不适用于 IMAP?

最佳答案

自从该线程打开以来已经有一段时间了,但我认为此处描述的问题是由于 IMAP 服务器的部分获取实现中的错误造成的。如此链接 http://www.oracle.com/technetwork/java/faq-135477.html#fetch 中所述在这些注释中https://javamail.java.net/docs/NOTES.txt 。有一个解决方法可以解决这个问题,添加以下属性:

props.setProperty("mail.imap.partialfetch", "false");

关于java - 为什么 JavaMail BodyPart.getInputStream() 在使用 IMAP 时返回空流,而在使用 POP3 时则不返回空流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25812757/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com