无法使用包含使用Thunderbird发送的.eml文件的电子邮件加载BODYSTRUCTURE例外

时间:2013-08-08 00:08:04

标签: gmail imap javamail gmail-imap 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)

4 个答案:

答案 0 :(得分:3)

我使用this方法取得了成功。简而言之,如果您的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;
            }
        }
    } 

答案 1 :(得分:2)

您使用的是什么版本的JavaMail?

您可能遇到了here所述的Gmail错误之一。

答案 2 :(得分:1)

produce malformed BODYSTRUCTURE responses知道GMail,例如this message from their representative。我上次检查时(2012年中),它仍未固定。

答案 3 :(得分:0)

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

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