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