从同一个IP地址打开imap连接有限制吗?

时间:2014-03-01 05:03:04

标签: imap gmail-imap

您好我正在实施电子邮件客户端应用程序我的要求是我需要监控指定IMAP服务器中的所有可用邮箱。我为每个邮箱创建了单独的TCP连接。但我正在从IMAP服务器断开连接。我正在尝试使用Gmail / yahoo进行测试。打开从同一个IP到特定IMAP服务器的多个连接是否有任何限制?特别是在Gmail和Yahoo。

或者无论如何在不使用IMAP-NOTIFY的情况下监控单一连接中的所有邮箱似乎在Gmail / Yahoo中都不支持...

请帮帮我......

1 个答案:

答案 0 :(得分:1)

这是我之前在stackoverflow上回答的问题,但现在只能通过wayback machine获得。问题是如何“杀死太多并行的IMAP连接”。转载如下;核心外卖消息是,出于某种原因,大多数服务器管理员更喜欢使用较少数量的短期连接,而不是更长时间内处于活动状态的更多连接,但他们大部分时间都在后台静默闲置。他们没有得到的是IMAP协议设计,考虑到长期连接,并试图阻止 导致浪费资源,因为客户端将不断重新同步邮箱,因为他们在他们之间跳来跳去。

原始答案如下:

不,这是一个非常错误的想法。 IMAP的设计使得监控单个邮箱需要一个连接;在大多数IMAP服务器实现中,这意味着单个进程。但是,除非用户正在使用的客户端严重损坏,否则所有这些连接都将进入IDLE模式。在IDLE中,客户端被动地通知有关邮箱状态的任何更新。如果禁用这些连接,客户端必须主动轮询许多邮箱中的更改。现在自己决定 - 更糟糕的是,有十个进程闲置,还是一个进程每两分钟进行一次大量轮询?哪些解决方案会消耗更多的能源,CPU时间和IO操作?这是并行连接的数量。

第二个问题是关于长寿的联系。同样,这是IMAP的一个关键方面 - 每个连接都带有大量相关的状态信息,而这些信息的获取成本相当高。除非您的服务器实现某些扩展并且您的客户端使用它们(ESEARCH,CONDSTORE,QRESYNC是关键位),否则打开邮箱可能需要O(n)操作。我不知道您的用户有多少邮件,但您真的想转移,例如当你决定杀死一个连接因为它已经激活“太长”时250k消息的消息标志?

最后,任何合理的IMAP服务器供应商都提供了一种方法来配置并发进程数量的每用户会话限制。使用它比维护用于临时杀死“未使用”连接的脚本要好得多。

如果您想了解有关同步过程的更多信息,我的论文是关于在具有片状网络和有限资源的客户端上使用IMAP,描述了客户必须做些什么才能向用户显示邮箱的更新视图。