无法加载BODYSTRUCTURE异常,因为使用Thunderbird发送的电子邮件包含.eml文件



我们有一个使用Java Mail API访问Gmail帐户(IMAP)的应用程序。适用于所有类型的电子邮件,但包含.eml文件作为附件的邮件除外,该邮件是使用Thunderbird发送的。

以下是尝试检索该消息时的异常堆栈跟踪。请告知。

Caused by: com.google.code.javax.mail.MessagingException: Unable to load BODYSTRUCTURE
        at com.google.code.com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1377)
        at com.google.code.com.sun.mail.imap.IMAPMessage.getContentType(IMAPMessage.java:492)

我成功地使用了这种方法。简而言之,如果Message的类型为MimeMessage,并且出现此异常,请从原始MimeMessage创建一个MimeMessage的新实例,然后对其进行处理。例如,当我调用Message的getContent()方法时,我收到了这个错误,所以我编写了这个方法来获取内容:

private Object getEmailContent(Message email) throws IOException, MessagingException {
        try {
            return email.getContent();
        } catch (MessagingException e) {
            // handling the bug
            if (email instanceof MimeMessage && "Unable to load BODYSTRUCTURE".equalsIgnoreCase(e.getMessage())) {
                return new MimeMessage((MimeMessage) email).getContent();
            } else {
                throw e;
            }
        }
    } 

您使用的是哪个版本的JavaMail?

你可能遇到了这里描述的Gmail错误之一。

GMail已知会产生格式错误的BODYSTRUCTURE响应,请参见其代表的此消息。上次我检查(2012年年中)时,它仍然没有修复。

另一种可能性是代表电子邮件的文件被手动从邮件服务器中删除,这导致电子邮件服务器创建的索引(索引文件)错误。这可能会导致同样的错误。

我使用的是Mail Enable,解决方案是删除索引文件(在我的情况下为_index.xml)

最新更新