【问题标题】:Checking for attachments using javamail without getting the message content使用 javamail 检查附件而不获取邮件内容
【发布时间】:2015-04-23 07:01:53
【问题描述】:

我试图找到某种答案,甚至是如何做到这一点的提示,但是没有运气。

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

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() 函数,并且消息会在服务器上自动标记为 SEEN(已读)。

谁能帮我写一个简单的函数来获取基本的电子邮件信息并显示邮件是否有任何附件而无需获取整个邮件内容?实际上,我只需要附件方面的帮助,因为我已经知道如何获取其他基本标头字段,而且它们不请求 getContent() 方法,也不将我的电子邮件标记为已查看。

普通的电子邮件客户端如何做到这一点?我想一定有一些快速简单的方法来检查电子邮件是否有附件。

提前谢谢你!

编辑:或者,有没有办法使用 getContent() 函数而不将电子邮件标记为 SEEN?

【问题讨论】:

    标签: java email jakarta-mail


    【解决方案1】:

    我不知道你从哪里得到“建议”的代码,但肯定不是来自 JavaMail 网站。

    你会想读这个JavaMail FAQ entry

    要检查部件的 MIME 类型,请使用 isMimeType 方法。您可以在msgshow.java sample program 中找到示例。

    【讨论】:

    • 此时,什么是 MIME 类型对我来说并不重要。我只想知道有没有附件。此外,如果您实施他们在常见问题解答中所说的内容,您将获得建议的代码(您通过消息搜索附件部分)。
    • 检查 MIME 类型是您在不实际加载任何内容的情况下确定是否存在附件的方法。正如常见问题解答所解释的那样,“此消息是否有附件?”在一般情况下,这不是一个简单的问题。如果不关心异常情况,那就简单一点。
    • 为了获取 MIME 类型的消息,我必须首先获取其内容,如他们的常见问题示例“如何在包含附件的消息中找到主要消息正文?”中所示。请,如果您现在有一种方法可以在不获取其内容的情况下读取消息(或消息部分)的 MIME 类型,这对我很有帮助。
    • 现在,您不必获取消息内容来确定 MIME 类型。正如我所说,使用isMimeType 方法。你看过 msgshow.java 示例程序吗?
    • 其实你是对的。直到现在我才知道 msgshow.java 示例代码。我将测试代码,看看它在更复杂的情况下是否能正常工作,如果能,这绝对是公认的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2013-01-13
    • 2019-07-20
    • 2013-06-08
    • 2023-03-03
    相关资源
    最近更新 更多