确定通过IMAP返回的消息响应的开始和结束

时间:2011-10-21 11:06:17

标签: java parsing email imap

我正在尝试解析包含电子邮件内容的IMAP返回的响应。如何确定从通过IMAP检索的响应返回的消息的开始和结束?

以下是通过IMAP检索电子邮件时的2个回复示例:

. fetch 3728 body.peek[1]
* 3728 FETCH (BODY[1] {45}
Hello,
This is test message 1. 
:(
:)

)
* 3732 FETCH (FLAGS (\Seen \Recent))
* 3733 FETCH (FLAGS (\Seen \Recent))
. OK FETCH completed.

第二次检索:

. fetch 3729 body.peek[1]
* 3729 FETCH (BODY[1] {42}
Hello,
This is test message 2. :)

)
The above bracket is part of the message's content.

)
. OK FETCH completed.

首先,当新电子邮件进入帐户时,这两种检索有时会给出不同的结尾。其次,似乎消息以括号和. OK FETCH Completed响应结束。但是,如果内容也包括括号,会发生什么?然后我可能会读错了括号,从来没有得到完整的内容。

像这样,在解析IMAP的响应时,我该如何解释响应并正确获取内容?

1 个答案:

答案 0 :(得分:0)

您应该阅读rfc 3501 ...

IMAP字符串可以用两种形式表示: 1)引用字符串。 2)字符串文字。

String literal synatx: {} number_of_bytes CRLF - 这里你需要读取字节数。注意:BYTES不是字符串!!!

同样,IMAP规范说:您需要随时准备解析任何响应,任何字符串部分也可以是字符串文字。

编码稳定全功能的IMAP客户端并不容易。