使用javamail检查附件而不获取邮件正文内容

5

我尝试寻找答案或提示如何做到这一点,但是没有成功。

我想检查电子邮件消息是否有任何附件。但是,如果我使用建议的代码:

Object content = bPart.getContent();

if (content instanceof String) {
    if (Part.ATTACHMENT.equalsIgnoreCase(bPart.getDisposition()) || StringUtils.isNotBlank(bPart.getFileName())) {
        // It's attachment
        haveAttachment = true;
    }
    else {
        // It's text or html
        emailBody = content.toString();
    }
}
else if (content instanceof InputStream) {
    if (Part.ATTACHMENT.equalsIgnoreCase(bPart.getDisposition()) || StringUtils.isNotBlank(bPart.getFileName())) {
        // It's attachment
        haveAttachment = true;
    }
}

我必须在我的电子邮件信息上使用getContent()函数,这会自动将邮件标记为已读。请问有人可以帮我编写一个简单的函数来获取基本的电子邮件信息,并显示消息是否有任何附件,而不需要获取整个消息内容吗?实际上,我只需要关于附件的帮助,因为我已经知道如何获取其他基本的头部字段,它们不需要请求getContent()方法,也不会标记我的邮件为已读。
常规的电子邮件客户端是如何做到的呢?我想肯定有一些快速且简单的方法来检查电子邮件是否有附件。
提前感谢你!
编辑:或者,有没有一种方法可以在不标记电子邮件为已读的情况下使用getContent()函数?
1个回答

3
我不知道你从哪里得到了那个“建议”的代码,但它肯定不是来自JavaMail网站。
你需要阅读这个 JavaMail FAQ entry
要检查部分的MIME类型,请使用isMimeType方法。你可以在msgshow.java示例程序中找到一个例子。

此时 MIME 类型对我来说并不重要,我只想知道是否有任何附件。另外,如果您按照他们在常见问题解答中所说的实现代码,您将得到建议的代码(您可以通过搜索包含附件部分的消息来完成)。 - milosh
检查MIME类型是确定是否存在附件而不实际加载任何内容的方法。正如常见问题解答所解释的那样,“这个消息有附件吗?”在一般情况下并不是一个简单的问题。如果您不关心不寻常的情况,那么它会更简单一些。 - Bill Shannon
为了获取消息的MIME类型,我必须先获取其内容,就像他们FAQ示例中所示的“如何在带有附件的消息中找到主要消息正文?”。如果您知道一种不需要获取其内容即可读取消息(或消息部分)的MIME类型的方法,那对我来说将非常有帮助。 - milosh
现在,您不必获取消息内容来确定MIME类型。正如我所说,使用isMimeType方法。您看过msgshow.java示例程序吗? - Bill Shannon
实际上,你是正确的。我之前并不知道 msgshow.java 示例代码。我将测试该代码以查看它在更复杂的情况下是否能够正确工作,如果可以的话,这绝对是可接受的答案。 - milosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接