如何使用IMAP命令检测已选择的邮箱?

时间:2014-02-05 06:55:46

标签: imap

是否有任何IMAP命令,可以帮助识别当前选定的邮箱。

用例: 假设存在一个缓存IMAP连接的代理服务器,当客户端连接时,如果已经选择了邮箱,则客户端不必浪费时间选择邮箱。

1 个答案:

答案 0 :(得分:3)

正如Max所说,你误解了RFC3501的状态机。您无法“结束”已经选择进入任何邮箱。如果这样的事情发生了,那么IMAP代理就会被无可救药地破坏,并且没有理智的方式来使用它。

请参阅IMAP state machine from RFC3501。在IMAP协议中,在建立连接之后,状态只能是“已验证”,“未验证”和“注销”之一。任何时候都无法直接进入所选状态。

如果您向图片添加“IMAP代理”,则无法以这种方式缓存IMAP连接,或者您无法将IMAP与您的代理进行通信。虽然很容易有一些受IMAP启发的协议你可以在这里使用,也就是说有几个扩展来完成你想要做的事情,但它不再是RFC3501定义的IMAP。

现在,绝对可能的是在您的IMAP服务器前面设置一个代理服务器,这样可以帮助您解决问题。 TLS连接开销。但是,如果这是您的设置,则您的IMAP代理必须确保在重新使用连接时未选择任何邮箱。您还必须发明一些重新认证方法,但现在已超出范围。

有关为何以这种方式设计的技术背景,请务必阅读how the SELECT command works。在IMAP中,某些邮箱数据在SELECT处理期间传输,这些数据对于确保客户端和服务器共享一个良好同步的邮箱状态视图非常重要。如果您的客户突然跳入选定状态,您将不得不以其他方式获取这些元数据(并注意明确禁止这种“其他方式”,即您should not issue STATUS on the currently selected mailbox。使用相当现代的IMAP服务器,即一个支持CONDSTOREQRESYNC扩展的要求甚至更为重要。

通常,IMAP协议以大多数人期望的方式从代理中获益。如果你真的需要使用一个,也许你可以分享更多关于导致你得出这个结论的信息。