我正在研究IMAP,所以只是阅读正文(正文[header.fields(DATE FROM SUBJECT)])我正在传递这个命令。
但是问题就像有时候我的字符串会从原始字符串中返回额外的东西。 有时候我得到了有限的一部分绳子意味着身体的一半部分。 因此,每当我传递第二个命令时,它将接受作为第一个命令并返回结果作为 第一个命令待定结果。;
因此,我担心的是我无法恢复身体部位的正确数据。
根据我的知识,我认为这是因为互联网数据包的tresfersize,但除了这看外观或任何其他邮件管理器将正常工作所以这是什么机制为 这些数据正在复原。
或其他任何我的编码......
谢谢..
答案 0 :(得分:1)
从包含“额外内容”的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 <gray@cac.washington.edu>
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(非免费)。