如何使用Twisted设置IMAP标志

时间:2014-02-24 04:01:01

标签: python imap twisted

如何使用imap4.IMAP4Client删除邮件?我无法使用“删除”方法正确应用“已删除”标签。

我一直收到以下错误:

Failure: twisted.mail.imap4.IMAP4Exception: Invalid system flag \

示例代码将不胜感激。这就是我到目前为止所做的:

from twisted.internet import protocol, reactor
from twisted.mail import imap4

#Variables for connection
username = 'user@host.com'
password = 'mypassword'
host = 'imap.host.com'
port = 143

class IMAP4LocalClient(imap4.IMAP4Client):
    def connectionMade(self):
        self.login(username,password).addCallbacks(self._getMessages, self._ebLogin)

    #reports any connection errors
    def connectionLost(self,reason):
        reactor.stop()

    #drops the connection
    def _ebLogin(self,result):
        print result
        self.transport.loseConnection()

    def _programUtility(self,result):
        print result
        return self.logout()

    def _cbExpungeMessage(self,result):
        return self.expunge().addCallback(self._programUtility)

    def _cbDeleteMessage(self,result):
        return self.setFlags("1:5",flags=r"\\Deleted",uid=False).addCallback(self._cbExpungeMessage)

    #gets the mailbox list
    def _getMessages(self,result):
        return self.list("","*").addCallback(self._cbPickMailbox)

    #selects the inbox desired    
    def _cbPickMailbox(self,result):
        mbox='INBOX.Trash'
        return self.select(mbox).addCallback(self._cbExamineMbox)

    def _cbExamineMbox(self,result):
        return self.fetchMessage("1:*",uid=False).addCallback(self._cbDeleteMessage)

class IMAP4ClientFactory(protocol.ClientFactory):
    def buildProtocol(self,addr):
        return IMAP4LocalClient()

    def clientConnectionFailed(self,connector,reason):
        print reason
        reactor.stop()


reactor.connectTCP(host,port,IMAP4ClientFactory())
reactor.run()

更改为:

def _cbDeleteMessage(self,result):
    return self.setFlags("1:5",flags=['\\Deleted'],uid=False).addCallback(self._cbExpungeMessage)

感谢Jean-Paul Calderone并且它有效,setFlags需要一个列表,而不仅仅是一个字符串。

1 个答案:

答案 0 :(得分:1)

我认为这里存在两个问题。

首先,您将一个字符串作为flags参数传递给setFlagsNotice the documentation for that parameter要设置的标志(类型:任何可迭代的str)。请尝试使用包含一个字符串的列表。

其次,\\Deleted可能不是您正在与支持交互的服务器的标志。 IMAP4中的标准删除标记为\Deleted