发布从包含“额外的东西” IMAP服务器的响应示例会有所帮助。
您最可能面临的问题是未标记的服务器响应。
继承人什么RFC3501说:
状态响应可以被标记或未标记。标记的状态响应指示完成结果的客户端命令(OK,NO,或者BAD状态),并有一个标签相匹配的命令:
C: a002 NOOP
S: a002 OK NOOP completed
一些状态响应,所有服务器数据,均未标记。一个 未标记的响应由标记“*”而不是标记指示。
C: a047 NOOP
S: * 22 EXPUNGE
S: * 23 EXISTS
S: * 3 RECENT
S: * 14 FETCH (FLAGS (\Seen \Deleted))
S: a047 OK NOOP completed
所以你需要区分这两种响应类型。
请记住,检查是否每一个接收到线,从“*”字符开始是不够的,因为你的电子邮件也可能来自恒星字符开始行:
C: a004 fetch 12 body[header]
S: * 12 FETCH (RFC822 {342}
S: Date: Wed, 17 Jul 1996 02:23:25 -0700 (PDT)
S: From: Terry Gray <[email protected]>
S: Subject: IMAP4rev1 WG mtg summary and minutes
S: MIME-Version: 1.0
S:
S: * This is email body containing start char
S: )
S: a004 OK FETCH completed
{342}是的确切数目你应该阅读的字节。
底线是不要重新发明车轮使用现有的库。
你可以看看我的IMAP component(不是免费的)。
您可以使用现有的IMAP库吗?这比编写你自己的要容易得多。如果没有,您是否可以发布包含“额外内容”的IMAP服务器的示例响应?你连接到哪个IMAP服务器进行测试? – dkarp 2011-02-11 15:19:52