【问题标题】:How to get rid of 'Failed to load IMAP envelope' Messaging Exception?如何摆脱“无法加载 IMAP 信封”消息异常?
【发布时间】:2013-10-01 09:27:28
【问题描述】:

我正在尝试获取Message msg[] = folder.getMessages(); 的电子邮件列表。之后我得到了每条消息的详细信息,同时我得到了一些消息的javax.mail.MessagingException: Failed to load IMAP envelope 异常。

这是产生错误的一条消息的协议跟踪 -

A7 FETCH 2 (ENVELOPE INTERNALDATE RFC822.SIZE)
* 2 FETCH (RFC822.SIZE 2567 INTERNALDATE "29-Apr-2011 13:49:01 +0000" ENVELOPE ("Fri, 29 Apr 2011 19:19:01 +0530" "I NEES YOUR ASSISANCE?????" (("Mr Leung Cheung" NIL "info" "milium.com.br")) (("Mr Leung Cheung" NIL "info" "milium.com.br")) ((NIL NIL "mr.leung_cheung" "live.hk")) () NIL NIL NIL "<20110429134718.70333732030A@mail2.milium.com.br>"))
A7 OK FETCH Completed

错误的堆栈跟踪是-

Failed to load IMAP envelope stacktrace: javax.mail.MessagingException: Failed to load IMAP envelope
    at com.sun.mail.imap.IMAPMessage.loadEnvelope(IMAPMessage.java:1276)
    at com.sun.mail.imap.IMAPMessage.getSentDate(IMAPMessage.java:377)
    at com.my.main.model.TestMail.showAllMails(TestMail.java:95)
    at com.my.main.model.TestMail.main(TestMail.java:45)

我正在使用 JavaMail-1.5。

我该如何解决这个错误,有什么方法或设置可以解决它并在不跳过该消息的情况下获取消息的详细信息?

谢谢,

尼拉姆·夏尔马

【问题讨论】:

    标签: java jakarta-mail imap


    【解决方案1】:

    你的服务器坏了。请将此错误报告给服务器供应商。你用的是什么服务器?

    在响应中,消息的“To”值必须符合规范中定义的语法:

    env-to      = "(" 1*address ")" / nil
    address     = "(" addr-name SP addr-adl SP addr-mailbox SP addr-host ")"
    

    相反,服务器返回了“()”。如果没有 To 标头,它应该返回“NIL”。

    您可以使用JavaMail FAQ 中描述的技术解决服务器错误。

    【讨论】:

    • 谢谢比尔,我正在使用 IMAP 服务器获取 Yahoo 帐户的消息。使用 -oracle.com/technetwork/java/javamail/faq/… 提供的选项解决获取消息内容的问题。但是,如何使用 stackoverflow.com/questions/18891509/… 中提到的 SearchTerm 获得抛出“无法加载 IMAP 信封”的消息,这是否可以通过 MessageID 获取该消息?还有其他方法可以通过 MessageID 获取此类消息吗??
    • 不使用 MessageIDTerm,而是使用 HeaderTerm 并检查 Message-ID 标头。
    • 再次感谢,但我无法通过 SearchTerm searchTerm = new HeaderTerm("Message-ID", strMessageID); Message[] foundMessages = folder.search(searchTerm);虽然我的消息包含名为“Message-ID”的标题。此搜索返回零消息。我正在为 Yahoo IMAP 服务器工作。如何获取消息?
    • 使用 message.match(searchTerm)。它将向服务器询问标头,它将在本地进行比较,而不是要求服务器进行搜索。
    • 感谢比尔的帮助,您能否建议一种更适合获取消息(如果我有消息 ID)的方法,方法是提前获取消息数组,然后执行 message.match(headerTerm)我在线程的回复中提到的每条消息或 SearchTerm - stackoverflow.com/questions/18891509/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    相关资源
    最近更新 更多