我们有一个使用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)
答案 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)