C#IMAP客户端 - 与邮件服务器的多个连接

时间:2011-08-11 17:31:34

标签: c# tcp imap

在尝试了很多IMAP API之后,我决定自己编写(大多数是内存猪,有些只是不工作,内存异常等等)。

无论如何,我已经编写了一些有效的代码(使用TCPClient对象)及其目前的优点。但是,我希望我的能够处理对邮件服务器的多个请求。例如: 假设我得到了所有UID的列表,然后循环浏览此列表,获取我想要的内容(正文,标题等)。

问题是,我如何同时处理多个请求?因此,我不是一次一个地循环UID,而是一次处理10个。

这里最好的方法是什么?一组TCP客户端,每个都有自己的线程?

感谢。

1 个答案:

答案 0 :(得分:4)

通常,建议IMAP客户端始终只与服务器建立一个连接。其他连接不仅需要服务器上的宝贵资源,更重要的是IMAP规范并不能保证两个连接可以同时选择同一个邮箱。依赖服务器上存在的此功能可能会使您的客户端与这些服务器不兼容。

相反,您应该尽可能高效地使用协议。请注意,许多命令可以在一组或一系列UID上运行。这允许您在指定每个UID时发出一个单一请求,而不是单独为每个UID发出一个请求。

另一个好的做法是不要求比当前需要的数据更多的数据。例如,假设您有一个消息列表。然后不要求所有这些信息的详细信息,只请求当前可见消息的信息。

我强烈建议您阅读RFC 2683,IMAP4 Implementation Recommendations。它涵盖了这一点。

如果你决定使用多个连接,那么一个好方法通常是使用异步操作而不是显式使用单个线程。与某种运行循环集成相结合通常也很有用,就像在有数据要读取时调用代码而不是代码必须轮询或明确检查它。即使您只使用单个连接,这通常也是一种很好的方法。请记住,根据IMAP协议,即使您没有明确要求,服务器也可能会向您发送回复。