Description
ATM two sessions are used - an ImapSession for the IMAP protocol layers, and a MailboxSession for the mailbox layers. This is probably a mistake. The API would be easier to extend if protocol and mailbox used the same session.
Unfortunately, ImapSession is coupled to a number of quite IMAP specific classes. Improvements to the design in this area (eg. simplification of the inefficient notification system) would probably allows this to be refactored but for the moment, seems better to push methods up into MailboxSession, and MailboxSession up into the API. ImapSession could then extend MailboxSession.