Known subclasses: twisted.mail.test.test_imap.FakeyServer, twisted.mail.test.test_imap.SimpleServer

Implements interfaces: twisted.mail.interfaces.IMailboxIMAPListener

Protocol implementation for an IMAP4rev1 server.

The server can be in any of four states:

  • Non-authenticated
  • Authenticated
  • Selected
  • Logout
Method __init__ Undocumented
Method capabilities Undocumented
Method connectionMade Called when a connection is made.
Method connectionLost Called when the connection is shut down.
Method timeoutConnection Called when the connection times out.
Method rawDataReceived Override this for when raw data is received.
Method lineReceived Override this for when each line is received.
Method parse_command Undocumented
Method parse_pending Undocumented
Method dispatchCommand Undocumented
Method lookupCommand Undocumented
Method arg_finalastring Parse an astring from line that represents a command's final argument. This special case exists to enable parsing empty string literals.
Method arg_astring Parse an astring from the line, return (arg, rest), possibly via a deferred (to handle literals)
Method arg_atom Parse an atom from the line
Method arg_plist Parse a (non-nested) parenthesised list from the line
Method arg_literal Parse a literal from the line
Method arg_searchkeys searchkeys
Method arg_seqset sequence-set
Method arg_fetchatt fetch-att
Method arg_flaglist Flag part of store-att-flag
Method arg_line Command line of UID command
Method opt_plist Optional parenthesised list
Method opt_datetime Optional date-time string
Method opt_charset Optional charset of SEARCH command
Method sendServerGreeting Undocumented
Method sendBadResponse Undocumented
Method sendPositiveResponse Undocumented
Method sendNegativeResponse Undocumented
Method sendUntaggedResponse Undocumented
Method sendContinuationRequest Undocumented
Method listCapabilities Undocumented
Method do_CAPABILITY Undocumented
Method do_LOGOUT Undocumented
Method do_NOOP Undocumented
Method do_AUTHENTICATE Undocumented
Method authenticate Undocumented
Method do_STARTTLS Undocumented
Method do_LOGIN Undocumented
Method authenticateLogin Lookup the account associated with the given parameters
Method do_NAMESPACE Undocumented
Method do_IDLE Undocumented
Method parse_idle Undocumented
Method do_CREATE Undocumented
Method do_DELETE Undocumented
Method do_RENAME Undocumented
Method do_SUBSCRIBE Undocumented
Method do_UNSUBSCRIBE Undocumented
Method do_STATUS Undocumented
Method do_APPEND Undocumented
Method do_CHECK Undocumented
Method checkpoint Called when the client issues a CHECK command.
Method do_CLOSE Undocumented
Method do_EXPUNGE Undocumented
Method do_SEARCH Undocumented
Method search_ALL Returns True if the message matches the ALL search key (always).
Method search_ANSWERED Returns True if the message has been answered.
Method search_BCC Returns True if the message has a BCC address matching the query.
Method search_BEFORE Undocumented
Method search_BODY Undocumented
Method search_CC Undocumented
Method search_DELETED Undocumented
Method search_DRAFT Undocumented
Method search_FLAGGED Undocumented
Method search_FROM Undocumented
Method search_HEADER Undocumented
Method search_KEYWORD Undocumented
Method search_LARGER Undocumented
Method search_NEW Undocumented
Method search_NOT Returns True if the message does not match the query.
Method search_OLD Undocumented
Method search_ON Undocumented
Method search_OR Returns True if the message matches any of the first two query items.
Method search_RECENT Undocumented
Method search_SEEN Undocumented
Method search_SENTBEFORE Returns True if the message date is earlier than the query date.
Method search_SENTON Returns True if the message date is the same as the query date.
Method search_SENTSINCE Returns True if the message date is later than the query date.
Method search_SINCE Undocumented
Method search_SMALLER Undocumented
Method search_SUBJECT Undocumented
Method search_TEXT Undocumented
Method search_TO Undocumented
Method search_UID Returns True if the message UID is in the range defined by the search query.
Method search_UNANSWERED Undocumented
Method search_UNDELETED Undocumented
Method search_UNDRAFT Undocumented
Method search_UNFLAGGED Undocumented
Method search_UNKEYWORD Undocumented
Method search_UNSEEN Undocumented
Method do_FETCH Undocumented
Method spew_envelope Undocumented
Method spew_flags Undocumented
Method spew_internaldate Undocumented
Method spew_rfc822header Undocumented
Method spew_rfc822text Undocumented
Method spew_rfc822size Undocumented
Method spew_rfc822 Undocumented
Method spew_uid Undocumented
Method spew_bodystructure Undocumented
Method spew_body Undocumented
Method spewMessage Undocumented
Method do_STORE Undocumented
Method do_COPY Undocumented
Method do_UID Undocumented
Method modeChanged Indicates that the write status of a mailbox has changed.
Method flagsChanged Indicates that the flags of one or more messages have changed.
Method newMessages Indicates that the number of messages in a mailbox has changed.
Method _unblock Undocumented
Method __doCommand Undocumented
Method __cbDispatch Undocumented
Method __ebDispatch Undocumented
Method _stringLiteral Undocumented
Method _fileLiteral Undocumented
Method _respond Undocumented
Method _setupChallenge Undocumented
Method __cbAuthChunk Undocumented
Method __cbAuthResp Undocumented
Method __ebAuthResp Undocumented
Method __ebAuthChunk Undocumented
Method __cbLogin Undocumented
Method __ebLogin Undocumented
Method _selectWork Undocumented
Method _ebSelectWork Undocumented
Method _cbSelectWork Undocumented
Method _listWork Undocumented
Method _cbListWork Undocumented
Method _ebListWork Undocumented
Method _cbStatusGotMailbox Undocumented
Method _ebStatusGotMailbox Undocumented
Method __cbStatus Undocumented
Method __ebStatus Undocumented
Method _cbAppendGotMailbox Undocumented
Method _ebAppendGotMailbox Undocumented
Method __cbAppend Undocumented
Method __ebAppend Undocumented
Method __cbCheck Undocumented
Method __ebCheck Undocumented
Method __cbClose Undocumented
Method __ebClose Undocumented
Method __cbExpunge Undocumented
Method __ebExpunge Undocumented
Method __cbSearch Undocumented
Method __cbManualSearch Apply the search filter to a set of messages. Send the response to the client.
Method _searchFilter Pop search terms from the beginning of query until there are none left and apply them to the given message.
Method _singleSearchStep Pop one search term from the beginning of query (possibly more than one element) and return whether it matches the given message.
Method __ebSearch Undocumented
Method __cbFetch Undocumented
Method __ebSpewMessage Undocumented
Method __ebFetch Undocumented
Method __cbStore Undocumented
Method __ebStore Undocumented
Method _cbCopySelectedMailbox Undocumented
Method _ebCopySelectedMailbox Undocumented
Method __cbCopy Undocumented
Method __cbCopied Undocumented
Method __ebCopy Undocumented

Inherited from LineReceiver:

Class Variable delimiter The line-ending delimiter to use. By default this is b'\r\n'.
Class Variable MAX_LENGTH The maximum length of a line to allow (If a sent line is longer than this, the connection is dropped). Default is 16384.
Method clearLineBuffer Clear buffered data.
Method dataReceived Protocol.dataReceived. Translates bytes into lines, and calls lineReceived (or rawDataReceived, depending on mode.)
Method setLineMode Sets the line-mode of this receiver.
Method setRawMode Sets the raw mode of this receiver. Further data received will be sent to rawDataReceived rather than lineReceived.
Method sendLine Sends a line to the other end of the connection.
Method lineLengthExceeded Called when the maximum line length has been reached. Override if it needs to be dealt with in some special way.

Inherited from Protocol (via LineReceiver):

Method logPrefix Return a prefix matching the class name, to identify log messages related to this protocol instance.

Inherited from BaseProtocol (via LineReceiver, Protocol):

Method makeConnection Make a connection to a transport and a server.

Inherited from _PauseableMixin (via LineReceiver):

Method pauseProducing Undocumented
Method resumeProducing Undocumented
Method stopProducing Undocumented

Inherited from TimeoutMixin:

Class Variable timeOut The number of seconds after which to timeout the connection.
Method callLater Wrapper around reactor.callLater for test purpose.
Method resetTimeout Reset the timeout count down.
Method setTimeout Change the timeout period
Method __timedOut Undocumented
def __init__(self, chal=None, contextFactory=None, scheduler=None):
Undocumented
def capabilities(self):
Undocumented
def connectionMade(self):

Called when a connection is made.

This may be considered the initializer of the protocol, because it is called when the connection is completed. For clients, this is called once the connection to the server has been established; for servers, this is called after an accept() call stops blocking and a socket has been received. If you need to send any greeting or initial message, do it here.

def connectionLost(self, reason):

Called when the connection is shut down.

Clear any circular references here, and any external references to this Protocol. The connection has been closed.

def timeoutConnection(self):

Called when the connection times out.

Override to define behavior other than dropping the connection.

def rawDataReceived(self, data):

Override this for when raw data is received.

def _unblock(self):
Undocumented
def lineReceived(self, line):

Override this for when each line is received.

ParameterslineThe line which was received with the delimiter removed. (type: bytes)
def parse_command(self, line):
Undocumented
def parse_pending(self, line):
Undocumented
def dispatchCommand(self, tag, cmd, rest, uid=None):
Undocumented
def lookupCommand(self, cmd):
Undocumented
def __doCommand(self, tag, handler, args, parseargs, line, uid):
Undocumented
def __cbDispatch(self, result, tag, fn, args, parseargs, uid):
Undocumented
def __ebDispatch(self, failure, tag):
Undocumented
def _stringLiteral(self, size):
Undocumented
def _fileLiteral(self, size):
Undocumented
def arg_finalastring(self, line):

Parse an astring from line that represents a command's final argument. This special case exists to enable parsing empty string literals.

ParameterslineA line that contains a string literal. (type: bytes)
ReturnsA 2-tuple containing the parsed argument and any trailing data, or a Deferred that fires with that 2-tuple (type: tuple of (bytes, bytes) or a Deferred)
See Alsohttps://twistedmatrix.com/trac/ticket/9207
def arg_astring(self, line, final=False):

Parse an astring from the line, return (arg, rest), possibly via a deferred (to handle literals)

ParameterslineA line that contains a string literal. (type: bytes)
finalIs this the final argument? @type final bool
ReturnsA 2-tuple containing the parsed argument and any trailing data, or a Deferred that fires with that 2-tuple (type: tuple of (bytes, bytes) or a Deferred)
def arg_atom(self, line):

Parse an atom from the line

def arg_plist(self, line):

Parse a (non-nested) parenthesised list from the line

def arg_literal(self, line):

Parse a literal from the line

def arg_searchkeys(self, line):

searchkeys

def arg_seqset(self, line):

sequence-set

def arg_fetchatt(self, line):

fetch-att

def arg_flaglist(self, line):

Flag part of store-att-flag

def arg_line(self, line):

Command line of UID command

def opt_plist(self, line):

Optional parenthesised list

def opt_datetime(self, line):

Optional date-time string

def opt_charset(self, line):

Optional charset of SEARCH command

def sendServerGreeting(self):
Undocumented
def sendBadResponse(self, tag=None, message=''):
Undocumented
def sendPositiveResponse(self, tag=None, message=''):
Undocumented
def sendNegativeResponse(self, tag=None, message=''):
Undocumented
def sendUntaggedResponse(self, message, isAsync=None, **kwargs):
Undocumented
def sendContinuationRequest(self, msg='Ready for additional command text'):
Undocumented
def _respond(self, state, tag, message):
Undocumented
def listCapabilities(self):
Undocumented
def do_CAPABILITY(self, tag):
Undocumented
def do_LOGOUT(self, tag):
Undocumented
def do_NOOP(self, tag):
Undocumented
def do_AUTHENTICATE(self, tag, args):
Undocumented
def authenticate(self, chal, tag):
Undocumented
def _setupChallenge(self, chal, tag):
Undocumented
def __cbAuthChunk(self, result, chal, tag):
Undocumented
def __cbAuthResp(self, result, tag):
Undocumented
def __ebAuthResp(self, failure, tag):
Undocumented
def __ebAuthChunk(self, failure, tag):
Undocumented
def do_STARTTLS(self, tag):
Undocumented
def do_LOGIN(self, tag, user, passwd):
Undocumented
def authenticateLogin(self, user, passwd):

Lookup the account associated with the given parameters

Override this method to define the desired authentication behavior.

The default behavior is to defer authentication to self.portal if it is not None, or to deny the login otherwise.

ParametersuserThe username to lookup (type: str)
passwdThe password to login with (type: str)
def __cbLogin(self, result, tag):
Undocumented
def __ebLogin(self, failure, tag):
Undocumented
def do_NAMESPACE(self, tag):
Undocumented
def _selectWork(self, tag, name, rw, cmdName):
Undocumented
def _ebSelectWork(self, failure, cmdName, tag):
Undocumented
def _cbSelectWork(self, mbox, cmdName, tag):
Undocumented
def do_IDLE(self, tag):
Undocumented
def parse_idle(self, *args):
Undocumented
def do_CREATE(self, tag, name):
Undocumented
def do_DELETE(self, tag, name):
Undocumented
def do_RENAME(self, tag, oldname, newname):
Undocumented
def do_SUBSCRIBE(self, tag, name):
Undocumented
def do_UNSUBSCRIBE(self, tag, name):
Undocumented
def _listWork(self, tag, ref, mbox, sub, cmdName):
Undocumented
def _cbListWork(self, mailboxes, tag, sub, cmdName):
Undocumented
def _ebListWork(self, failure, tag):
Undocumented
def do_STATUS(self, tag, mailbox, names):
Undocumented
def _cbStatusGotMailbox(self, mbox, tag, mailbox, names):
Undocumented
def _ebStatusGotMailbox(self, failure, tag):
Undocumented
def __cbStatus(self, status, tag, box):
Undocumented
def __ebStatus(self, failure, tag, box):
Undocumented
def do_APPEND(self, tag, mailbox, flags, date, message):
Undocumented
def _cbAppendGotMailbox(self, mbox, tag, flags, date, message):
Undocumented
def _ebAppendGotMailbox(self, failure, tag):
Undocumented
def __cbAppend(self, result, tag, mbox):
Undocumented
def __ebAppend(self, failure, tag):
Undocumented
def do_CHECK(self, tag):
Undocumented
def __cbCheck(self, result, tag):
Undocumented
def __ebCheck(self, failure, tag):
Undocumented
def checkpoint(self):

Called when the client issues a CHECK command.

This should perform any checkpoint operations required by the server. It may be a long running operation, but may not block. If it returns a deferred, the client will only be informed of success (or failure) when the deferred's callback (or errback) is invoked.

def do_CLOSE(self, tag):
Undocumented
def __cbClose(self, result, tag):
Undocumented
def __ebClose(self, failure, tag):
Undocumented
def do_EXPUNGE(self, tag):
Undocumented
def __cbExpunge(self, result, tag):
Undocumented
def __ebExpunge(self, failure, tag):
Undocumented
def do_SEARCH(self, tag, charset, query, uid=0):
Undocumented
def __cbSearch(self, result, tag, mbox, uid):
Undocumented
def __cbManualSearch(self, result, tag, mbox, query, uid, searchResults=None):

Apply the search filter to a set of messages. Send the response to the client.

ParametersresultA list two tuples of messages with their sequence ids, sorted by the ids in descending order. (type: list of tuple of (int, provider of imap4.IMessage))
tagA command tag. (type: str)
mboxThe searched mailbox. (type: Provider of imap4.IMailbox)
queryA list representing the parsed form of the search query. (type: list)
uidA flag indicating whether the search is over message sequence numbers or UIDs.
searchResultsThe search results so far or None if no results yet. (type: list)
def _searchFilter(self, query, id, msg, lastSequenceId, lastMessageId):

Pop search terms from the beginning of query until there are none left and apply them to the given message.

ParametersqueryA list representing the parsed form of the search query.
idThe sequence number of the message being checked.
msgThe message being checked.
lastSequenceIdThe highest sequence number of any message in the mailbox being searched. (type: int)
lastMessageIdThe highest UID of any message in the mailbox being searched. (type: int)
ReturnsBoolean indicating whether all of the query terms match the message.
def _singleSearchStep(self, query, msgId, msg, lastSequenceId, lastMessageId):

Pop one search term from the beginning of query (possibly more than one element) and return whether it matches the given message.

ParametersqueryA list representing the parsed form of the search query.
msgIdThe sequence number of the message being checked.
msgThe message being checked.
lastSequenceIdThe highest sequence number of any message in the mailbox being searched.
lastMessageIdThe highest UID of any message in the mailbox being searched.
ReturnsBoolean indicating whether the query term matched the message.
def search_ALL(self, query, id, msg):

Returns True if the message matches the ALL search key (always).

ParametersqueryA list representing the parsed query string. (type: A list of str)
idThe sequence number of the message being checked. (type: int)
def search_ANSWERED(self, query, id, msg):

Returns True if the message has been answered.

ParametersqueryA list representing the parsed query string. (type: A list of str)
idThe sequence number of the message being checked. (type: int)
def search_BCC(self, query, id, msg):

Returns True if the message has a BCC address matching the query.

ParametersqueryA list whose first element is a BCC str (type: A list of str)
idThe sequence number of the message being checked. (type: int)
def search_BEFORE(self, query, id, msg):
Undocumented
def search_BODY(self, query, id, msg):
Undocumented
def search_CC(self, query, id, msg):
Undocumented
def search_DELETED(self, query, id, msg):
Undocumented
def search_DRAFT(self, query, id, msg):
Undocumented
def search_FLAGGED(self, query, id, msg):
Undocumented
def search_FROM(self, query, id, msg):
Undocumented
def search_HEADER(self, query, id, msg):
Undocumented
def search_KEYWORD(self, query, id, msg):
Undocumented
def search_LARGER(self, query, id, msg):
Undocumented
def search_NEW(self, query, id, msg):
Undocumented
def search_NOT(self, query, id, msg, lastIDs):

Returns True if the message does not match the query.

ParametersqueryA list representing the parsed form of the search query. (type: A list of str)
idThe sequence number of the message being checked. (type: int)
msgThe message being checked. (type: Provider of imap4.IMessage)
lastIDsA tuple of (last sequence id, last message id). The last sequence id is an int containing the highest sequence number of a message in the mailbox. The last message id is an int containing the highest UID of a message in the mailbox. (type: tuple)
def search_OLD(self, query, id, msg):
Undocumented
def search_ON(self, query, id, msg):
Undocumented
def search_OR(self, query, id, msg, lastIDs):

Returns True if the message matches any of the first two query items.

ParametersqueryA list representing the parsed form of the search query. (type: A list of str)
idThe sequence number of the message being checked. (type: int)
msgThe message being checked. (type: Provider of imap4.IMessage)
lastIDsA tuple of (last sequence id, last message id). The last sequence id is an int containing the highest sequence number of a message in the mailbox. The last message id is an int containing the highest UID of a message in the mailbox. (type: tuple)
def search_RECENT(self, query, id, msg):
Undocumented
def search_SEEN(self, query, id, msg):
Undocumented
def search_SENTBEFORE(self, query, id, msg):

Returns True if the message date is earlier than the query date.

ParametersqueryA list whose first element starts with a stringified date that is a fragment of an imap4.Query(). The date must be in the format 'DD-Mon-YYYY', for example '03-March-2003' or '03-Mar-2003'. (type: A list of str)
idThe sequence number of the message being checked. (type: int)
def search_SENTON(self, query, id, msg):

Returns True if the message date is the same as the query date.

ParametersqueryA list whose first element starts with a stringified date that is a fragment of an imap4.Query(). The date must be in the format 'DD-Mon-YYYY', for example '03-March-2003' or '03-Mar-2003'. (type: A list of str)
def search_SENTSINCE(self, query, id, msg):

Returns True if the message date is later than the query date.

ParametersqueryA list whose first element starts with a stringified date that is a fragment of an imap4.Query(). The date must be in the format 'DD-Mon-YYYY', for example '03-March-2003' or '03-Mar-2003'. (type: A list of str)
def search_SINCE(self, query, id, msg):
Undocumented
def search_SMALLER(self, query, id, msg):
Undocumented
def search_SUBJECT(self, query, id, msg):
Undocumented
def search_TEXT(self, query, id, msg):
Undocumented
def search_TO(self, query, id, msg):
Undocumented
def search_UID(self, query, id, msg, lastIDs):

Returns True if the message UID is in the range defined by the search query.

ParametersqueryA list representing the parsed form of the search query. Its first element should be a str that can be interpreted as a sequence range, for example '2:4,5:*'. (type: A list of bytes)
idThe sequence number of the message being checked. (type: int)
msgThe message being checked. (type: Provider of imap4.IMessage)
lastIDsA tuple of (last sequence id, last message id). The last sequence id is an int containing the highest sequence number of a message in the mailbox. The last message id is an int containing the highest UID of a message in the mailbox. (type: tuple)
def search_UNANSWERED(self, query, id, msg):
Undocumented
def search_UNDELETED(self, query, id, msg):
Undocumented
def search_UNDRAFT(self, query, id, msg):
Undocumented
def search_UNFLAGGED(self, query, id, msg):
Undocumented
def search_UNKEYWORD(self, query, id, msg):
Undocumented
def search_UNSEEN(self, query, id, msg):
Undocumented
def __ebSearch(self, failure, tag):
Undocumented
def do_FETCH(self, tag, messages, query, uid=0):
Undocumented
def __cbFetch(self, results, tag, query, uid):
Undocumented
def __ebSpewMessage(self, failure):
Undocumented
def spew_envelope(self, id, msg, _w=None, _f=None):
Undocumented
def spew_flags(self, id, msg, _w=None, _f=None):
Undocumented
def spew_internaldate(self, id, msg, _w=None, _f=None):
Undocumented
def spew_rfc822header(self, id, msg, _w=None, _f=None):
Undocumented
def spew_rfc822text(self, id, msg, _w=None, _f=None):
Undocumented
def spew_rfc822size(self, id, msg, _w=None, _f=None):
Undocumented
def spew_rfc822(self, id, msg, _w=None, _f=None):
Undocumented
def spew_uid(self, id, msg, _w=None, _f=None):
Undocumented
def spew_bodystructure(self, id, msg, _w=None, _f=None):
Undocumented
def spew_body(self, part, id, msg, _w=None, _f=None):
Undocumented
def spewMessage(self, id, msg, query, uid):
Undocumented
def __ebFetch(self, failure, tag):
Undocumented
def do_STORE(self, tag, messages, mode, flags, uid=0):
Undocumented
def __cbStore(self, result, tag, mbox, uid, silent):
Undocumented
def __ebStore(self, failure, tag):
Undocumented
def do_COPY(self, tag, messages, mailbox, uid=0):
Undocumented
def _cbCopySelectedMailbox(self, mbox, tag, messages, mailbox, uid):
Undocumented
def _ebCopySelectedMailbox(self, failure, tag):
Undocumented
def __cbCopy(self, messages, tag, mbox):
Undocumented
def __cbCopied(self, deferredIds, tag, mbox):
Undocumented
def __ebCopy(self, failure, tag):
Undocumented
def do_UID(self, tag, command, line):
Undocumented
def modeChanged(self, writeable):

Indicates that the write status of a mailbox has changed.

ParameterswriteableA true value if write is now allowed, false otherwise. (type: bool)
def flagsChanged(self, newFlags):

Indicates that the flags of one or more messages have changed.

ParametersnewFlagsA mapping of message identifiers to tuples of flags now set on that message. (type: dict)
def newMessages(self, exists, recent):

Indicates that the number of messages in a mailbox has changed.

ParametersexistsThe total number of messages now in this mailbox. If the total number of messages has not changed, this should be None. (type: int or None)
recentThe number of messages now flagged \Recent. If the number of recent messages has not changed, this should be None. (type: int)
API Documentation for twisted, generated by pydoctor at 2020-03-25 17:34:30.