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

本文关键字:连接 邮件服务器 IMAP 客户端 | 更新日期: 2023-09-27 18:05:10

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

无论如何,我已经写了一些代码,工作(使用TCPClient对象),它的好到目前为止。但是,我希望我的服务器能够处理对邮件服务器的多个请求。例如:假设我获得了所有uid的列表,然后循环遍历该列表以获取每条消息所需的内容(Body、Header等)。

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

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

谢谢。

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

通常建议IMAP客户机在任何时候最多只有一个到服务器的连接。附加连接不仅需要服务器上的宝贵资源,而且更重要的是,IMAP规范不能保证两个连接可以同时选择相同的邮箱。依赖服务器上存在的此功能可能会使您的客户端与这些服务器不兼容。

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

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

我强烈建议你阅读RFC 2683, IMAP4实现建议。

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