1

我正在尝试从 IMAP 服务器获取大量邮件(2500 多封)。实际上我正在使用imap.FetchHeaders()功能,但这并不是那么快。然后我尝试了imap.FetchSingleHeader()但这比imap.FetchHeaders()慢得多......

你会推荐什么 ??

4

2 回答 2

2

imap.FetchHeaders() 方法将发送一个 IMAP 命令来获取标头。IMAP 服务器将在一个回复中发送所有标头。完成整个操作所需的大部分时间可能是 IMAP 服务器“思考时间”,用于处理请求并发送响应。如果您打开详细日志记录(设置 imap.VerboseLogging 属性 = true),然后检查 imap.LastErrorText 属性的内容,您应该会看到以毫秒为单位的计时信息。

总之,不可能更快地获取 2500 个标头。

注意:为了避免我们在尝试获取大量电子邮件时遇到的问题,Chilkat 将在单个请求中发送最多 1000 个标头的请求。这意味着在 FetchHeaders 方法内部(对于获取 2500 个标头的情况),将发生三个单独的请求/响应对。

于 2019-10-14T22:36:48.860 回答
2

谢谢霍华德,这是在上面关于 GetMailboxStatus 的评论中回答您的问题。

GetMailboxStatus 方法发送一个请求以下项目的 STATUS 命令:(MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)

鉴于它是 IMAP 协议标准的一部分(位于https://www.rfc-editor.org/rfc/rfc3501#section-6.3.10),它应该对所有服务器都有效。(我不记得曾经回答过 GetMailboxStatus 无法正常工作的支持问题。)

于 2019-10-16T17:01:29.537 回答