2013-01-24 37 views
0

更新這似乎是未加標籤的響應通過扭曲處理的方式,我發現的唯一示例似乎遍歷所接收的數據並以某種方式收集對他們命令的響應,儘管我是不知道我是怎麼...扭曲的IMAP4客戶端QUOTA命令系列


試圖實現在RFC 2087(http://tools.ietf.org/html/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) 

碼 - QUOTAROOT實施

def cbExamineMbox(result, proto): 
    """ 
     Callback invoked when examine command completes. 

     Retrieve the subject header of every message in the mailbox. 
     """ 
    print "Fetching storage space" 
    cmd = "GETQUOTAROOT" 
    args = _prepareMailboxName("INBOX") 
    resp = ("QUOTAROOT", "QUOTA") 
    d = proto.sendCommand(Command(cmd, args, wantResponse=resp)) 
    d.addCallback(cbFetch, proto) 
    return d 

def cbFetch(result, proto): 
    """ 
     Finally, display headers. 
     """ 
    print "Got Quota" 
    print result 

輸出

Fetching storage space 
>0005 GETQUOTAROOT INBOX 
<* QUOTAROOT "INBOX" "" 
<* QUOTA "" (STORAGE 171609 10584342) 
<0005 OK Success 
Got Quota 
([], 'OK Success') 

所以我得到的數據,但結果不包含它,我認爲這是因爲他們沒有標記的反應?

回答

2

由於IMAP4協議將許多不同類型的信息混合在一起作爲「未標記的響應」,因此您可能還需要更新IMAP4客戶端實現中解析代碼的其他部分。

具體來說,看看twisted.mail.imap4.Command及其finish方法。也看twisted.mail.imap4.IMAP4Client._extraInfo,這是unusedCallbackCommand.finish

首先,您可以檢查是否將QUOTA命令的未加標籤的響應發送到_extraInfo(然後丟棄(完好記錄))。

如果是的話,我懷疑你想教Command認識配額QUOTAROOT標籤化響應至QUOTA命令,這樣它收集它們,並將它們發送作爲結果的一部分,它激發了Deferred與。

如果不是,您可能需要深入瞭解Command.finish的邏輯,以查看數據確實以結尾的位置。

您可能還需要實際實現Command.wantResponse功能,這似乎只是部分當前形成(即,大量的客戶端代碼試圖有趣值發送到Command以初始化屬性,但據我可以告訴什麼實際上使用該屬性的值)。

+0

謝謝,從我所看到的解析代碼Command.finish只使用預設組標籤? – Zimm3r

+0

這是正確的。 –

+0

這篇文章有點舊了,但這只是幫助我解決了一個相關的教學扭曲問題,以識別RFC5256'THREAD'命令。 –