-->

为什么JavaMail的BodyPart.getInputStream()使用IMAP但是使用POP

2019-10-20 23:12发布

我有一个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的?

Answer 1:

它已经有一段时间,因为这个线程被打开了,但我认为在局部实现获取IMAP服务器在这里所​​描述的问题是由于错误。 由于在这个环节中描述http://www.oracle.com/technetwork/java/faq-135477.html#fetch并在这些笔记https://javamail.java.net/docs/NOTES.txt 。 还有就是要解决这个问题,添加以下属性一种解决方法:

props.setProperty( “mail.imap.partialfetch”, “假”);



文章来源: Why does JavaMail BodyPart.getInputStream() return an empty stream when using IMAP, but not when using POP3?