解析FETCH多个UID

时间:2015-07-17 19:31:19

标签: imap envelope

我需要编写一个IMAP代码来解析此命令的结果:

tag FETCH 1,2,3,4 ALL

大部分时间,响应都是这样的

* 1 FETCH (FLAGS ... ) ENVELOPE ("time" "subject" ... )\r\n
* 2 FETCH (FLAGS ... ) ENVELOPE ("time" "subject" ... )\r\n
....
tag OK FETCH COMPLETE 

等等每个Envelope以asterik UID开头,并以CRLF结束,所以我可以使用CRLF作为解析点。

问题是有些服务器使用IMAP字符串文字对我做出响应,即{150} \ r \ n ....并且由于\ r \ n是字符串文字的一部分,我不能再将它用作解析点。

一个想法是使用* UID作为解析点,但如果有人巧合地将其用作电子邮件主题,或者诸如此类,那么它将打破算法,因此我认为这样做是个坏主意。

有人可以告诉我如何在不使用CRLF的情况下有效地解析此类响应吗?非常感谢你。

编辑 - 希望改进问题,我试图根据解析点将每个单独的ENVELOPE解析为它自己的字符串,其中我需要一个标识一个字符串的开头和另一个字符串的结尾的解析点。

1 个答案:

答案 0 :(得分:0)

你需要的技巧是区分两种换行符,并且它存在:开始阅读,阅读直到看到CRLF,然后查看你拥有的开头。标签空间是OK,NO,BAD还是PREAUTH?如果是这样,您有完整的回复。如果没有,请查看最后10-15个字符。它们是“{”,数字,可选加号,“}”和CRLF?如果是,请阅读下一个CRLF并重复。如果没有,您会得到完整的答复。

请注意,在IMAP中,您必须先对响应执行操作,然后才能解析下一个响应。如果不这样做,MSN处理会中断,也可能存在其他问题。