diff --git a/lib/imap.js b/lib/imap.js index 4bf4928..c175fde 100644 --- a/lib/imap.js +++ b/lib/imap.js @@ -145,25 +145,32 @@ ImapConnection.prototype.connect = function(loginCb) { }); state.conn.on('ready', function() { - // First get pre-auth capabilities, including server-supported auth - // mechanisms + var checkedNS = false; + var redo = function(err) { + if (err) + return loginCb(err); + // Next, get the list of available namespaces if supported (RFC2342) + if (!checkedNS && self._serverSupports('NAMESPACE')) { + // Re-enter this function after we've obtained the available + // namespaces + checkedNS = true; + return self._send('NAMESPACE', redo); + } + // Lastly, get the top-level mailbox hierarchy delimiter used by the + // server + self._send('LIST "" ""', loginCb); + }; + // First, get the supported (pre-auth or otherwise) capabilities: self._send('CAPABILITY', function() { - // Next, attempt to login - var checkedNS = false; - self._login(function redo(err) { - if (err) - return loginCb(err); - // Next, get the list of available namespaces if supported (RFC2342) - if (!checkedNS && self._serverSupports('NAMESPACE')) { - // Re-enter this function after we've obtained the available - // namespaces - checkedNS = true; - return self._send('NAMESPACE', redo); - } - // Lastly, get the top-level mailbox hierarchy delimiter used by the - // server - self._send('LIST "" ""', loginCb); - }); + // No need to attempt the login sequence if we're on a PREAUTH + // connection. + if (state.status != STATES.AUTH) { + // First get pre-auth capabilities, including server-supported auth + // mechanisms + self._login(redo); + } else { + redo(); + }; }); });