0

我需要编写一个 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 

依此类推,每个信封都以星号 UID 开头,以 CRLF 结尾,所以我可以使用 CRLF 作为解析点。

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

一个想法是使用 * UID 作为解析点,但如果有人碰巧将其用作电子邮件主题或诸如此类的东西,它会破坏算法,所以我认为这样做是个坏主意。

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

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

4

1 回答 1

0

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

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

于 2015-07-17T20:47:37.613 回答