private bool AuthenticateCramMd5(NetworkCredential credentials)
        {
            var command  = new ImapCommand("AUTHENTICATE CRAM-MD5");
            var response = _client.SendAndReceive(command);

            // don't trim the last plus !!
            var base64    = response.CurrentLine.TrimStart(Characters.Plus).Trim();
            var challenge = Base64Encoder.Decode(base64, Encoding.UTF8);

            var username = credentials.UserName;
            var password = credentials.Password;

            var hash = CramMd5Hasher.ComputeHash(password, challenge);

            var authentication = username + " " + hash;
            var authCommand    = new BlankImapCommand(Base64Encoder.Encode(authentication));

            var reader = _client.SendAndReceive(authCommand);

            while (!reader.IsCompleted)
            {
                reader = _client.Receive(false);
            }
            return(reader.IsOk);
        }
        /// <summary>
        ///   Cram-MD5 authorization.
        ///   http://tools.ietf.org/html/rfc2195
        /// </summary>
        private bool AuthenticateCramMd5(NetworkCredential credentials)
        {
            var command  = new SmtpCommand("AUTH CRAM-MD5");
            var response = _client.SendAndReceive(command);

            var base64    = response.CurrentLine.Substring(4).TrimEnd();
            var challenge = Base64Encoder.Decode(base64, Encoding.UTF8);

            var username = credentials.UserName;
            var password = credentials.Password;

            var hash = CramMd5Hasher.ComputeHash(password, challenge);

            var authentication = username + " " + hash;
            var reader         = _client.SendAndReceive(new SmtpCommand(Base64Encoder.Encode(authentication)));

            return(reader.IsOk);
        }
        private bool AuthenticateCramMd5(NetworkCredential credentials)
        {
            var command  = new Pop3Command("AUTH CRAM-MD5");
            var response = _client.SendAndReceive(command);

            // don't trim the last plus !!
            var base64    = response.CurrentLine.TrimStart(Characters.Plus).Trim();
            var challenge = Base64Encoder.Decode(base64, Encoding.UTF8);

            var username = credentials.UserName;
            var password = credentials.Password;

            var hash = CramMd5Hasher.ComputeHash(password, challenge);

            var authentication = username + " " + hash;
            var authCommand    = new Pop3Command(Base64Encoder.Encode(authentication));

            _client.Send(authCommand);
            return(_client.Receive().IsPositive);
        }