public override void Authenticate()
        {
            Logger.Debug("Authenticating connection {0}", LogSource.Channel, UniqueId);

            if (channelState == ChannelState.Authenticated)
            {
                return;
            }

            if (channelState != ChannelState.Connected)
            {
                Logger.Error("Unable to authenticate in current channel state. ChannelState = {0}", LogSource.Channel, channelState);

                throw new ChannelException("Unable to authenticate in current channel state");
            }

            try
            {
                client.Capability();
                client.YahooImap();
                client.Authenticate(Username, Password);

                channelState = ChannelState.Authenticated;

                Logger.Debug("SUCCESS Authenticating connection {0}", LogSource.Channel, UniqueId);
            }
            catch (IMAP_ClientException ex)
            {
                channelState = ChannelState.Broken;

                Logger.Debug("FAILED Authenticating connection {0}. Server said {1}", LogSource.Channel, UniqueId, ex.ResponseText);

                throw new ChannelAuthenticationException(ex.ResponseText, ex);
            }
        }