Python Twisted IMAP4客户端配额命令系列

Python Twisted IMAP4客户端配额命令系列,python,imap,twisted,Python,Imap,Twisted,更新这似乎是twisted处理未标记响应的方式,我发现的唯一一个示例似乎是迭代接收到的数据,并以某种方式收集对其命令的响应,尽管我不确定如何 我正在尝试实现RFC2087()中定义的IMAP4配额命令 代码-ImapClient class SimpleIMAP4Client(imap4.IMAP4Client): """ A client with callbacks for greeting messages from an IMAP server.

更新这似乎是twisted处理未标记响应的方式,我发现的唯一一个示例似乎是迭代接收到的数据,并以某种方式收集对其命令的响应,尽管我不确定如何


我正在尝试实现RFC2087()中定义的IMAP4配额命令

代码-ImapClient

class SimpleIMAP4Client(imap4.IMAP4Client):
    """
        A client with callbacks for greeting messages from an IMAP server.
        """
    greetDeferred = None

    def serverGreeting(self, caps):
        self.serverCapabilities = caps
        if self.greetDeferred is not None:
            d, self.greetDeferred = self.greetDeferred, None
            d.callback(self)

    def lineReceived(self, line):
        print "<" + str(line)
        return imap4.IMAP4Client.lineReceived(self, line)

    def sendLine(self, line):
        print ">" + str(line)
        return imap4.IMAP4Client.sendLine(self, line)
输出

Fetching storage space
>0005 GETQUOTAROOT INBOX
<* QUOTAROOT "INBOX" ""
<* QUOTA "" (STORAGE 171609 10584342)
<0005 OK Success
Got Quota
([], 'OK Success')
获取存储空间
>0005 GETQUOTAROOT收件箱

由于IMAP4协议将大量不同类型的信息混合在一起作为“未标记的响应”,因此您可能还需要更新IMAP4客户端实现中解析代码的其他部分

具体来说,请看一下
twisted.mail.imap4.Command
及其
finish
方法。另请查看
twisted.mail.imap4.IMAP4Client.\u extraInfo
,这是作为
unusedCallback
传递给
命令的内容。finish

首先,您可以检查配额命令的未标记响应是否正在发送到
\u extraInfo
(然后被删除(很好,记录在案))

如果是这样,我怀疑您想教
命令
识别QUOTA和QUOTAROOT对QUOTA命令的未标记响应,以便它收集它们并将它们作为触发其
延迟
的结果的一部分发送

如果没有,您可能需要深入了解
命令的逻辑。完成
以查看数据的最终位置


您可能还希望实际实现
命令.wantResponse
功能,该功能目前似乎只是部分形成(即,许多客户端代码试图将有趣的值发送到
命令
以初始化该属性,但据我所知,实际上没有任何东西使用该属性的值)。

谢谢,据我所见,parsing code Command.finish只是使用了一组预设的标记?这篇文章有点旧,但它帮助我解决了一个相关的问题,即教twisted如何识别RFC5256
THREAD
命令。
Fetching storage space
>0005 GETQUOTAROOT INBOX
<* QUOTAROOT "INBOX" ""
<* QUOTA "" (STORAGE 171609 10584342)
<0005 OK Success
Got Quota
([], 'OK Success')