是否有任何优化的方法来避免循环?

时间:2014-03-04 04:24:44

标签: imap sync

您好我正在实施电子邮件客户端应用程序我的应用程序就像基于Web的应用程序我有xxxxxx用户数Mail Addentials。我需要在不使用任何循环概念的情况下同步它们。它应该立即反映邮件服务器中的某些更改。 IMAP IDLE似乎没有用,似乎它只是给新电子邮件到达。我想从Mailserver获取每个和每个更改。如果不使用任何循环,是否有其他方法可以执行此操作。我需要在广义方法中做到这一点。 bcoz Gmail支持但雅虎不支持... 如此普遍的方法是值得赞赏的。

2 个答案:

答案 0 :(得分:1)

避免循环的优化方法称为IDLE。这就是它被指定和实施的原因。如果有一种方法可以在没有IDLE的情况下做你想做的事情,那么首先就不需要IDLE了。

答案 1 :(得分:1)

您的问题表明对协议缺乏熟悉,以及对不存在的功能的奇怪权利。我非常怀疑你的咬伤方式比你能咀嚼的还多。

阅读RFC 3501封面以涵盖。这是IMAP4Rev1规范。一般来说,这就是互联网上的一般服务器所能提供的一切,而不是更多。有时甚至没有那么多*。 IMAP4基本上是单文件夹协议。您一次只能获取一个文件夹的信息和消息。您可以查询服务器以获取所需的信息;它没有义务告诉你任何你没有特别要求的东西。

编写真实的,功能齐全,功能广泛的电子邮件客户端困难。首先编写一个可以在基线IMAP上同步一个用户和一个文件夹的客户端。实现扩展以在可用时提高效率:IDLE,CONDSTORE等。然后转到许多文件夹和许多用户。

同样明白,成千上万用户的这个梦想也会遇到严重的后勤问题。互联网上没有服务器允许您在未事先达成协议的情况下登录数百次。当他们被神秘地锁定在他们从“怪异”地方登录的帐户时,您将使用户极度头痛。在谷歌的情况下,这可以通过OAuth来缓解,但这只会让你在他们对你正在做的事情感兴趣之前到目前为止。

另外,好的阅读是RFC 2683: IMAP Implementation Recommendations

*:有许多服务器不能正确支持SEARCH,有些服务器不会在SELECT上发送UIDNEXT,雅虎将不允许您保持持久连接或根本不提供任何更新而无需重新连接等。