Пример #1
0
        // -------------------------- AuthenticateToServer -------------------------
        private void AuthenticateToServer(SocketExchange InExchange)
        {
            string message = null;

            // log the base64 encoded string that follows the 334 challenge.
            string ResponseData = InExchange.GetResponseData( );

            byte[] msgBytes = Convert.FromBase64String(ResponseData);
            System.Text.Encoding encoding = System.Text.Encoding.UTF8;
            string msg = encoding.GetString(msgBytes);

            LogMessage(NetworkRole.Client, msg);

            // send the user name, expect back a challenge for the password.
            int LoopCx = 0;

            while (true)
            {
                message =
                    Convert.ToBase64String(
                        Encoding.ASCII.GetBytes(Username.ToCharArray( ))) +
                    SmtpConstants.CrLf;
                InExchange.ExpectedResponseCodes = new ExpectedResponseCodes(
                    SmtpConstants.Challenge, SmtpConstants.SyntaxError);
                InExchange.SendReceive(message);
                if (InExchange.ExpectedResponseCode == SmtpConstants.Challenge)
                {
                    break;
                }
                else if (InExchange.ExpectedResponseCode == SmtpConstants.SyntaxError)
                {
                    ++LoopCx;
                    if (LoopCx >= 3)
                    {
                        InExchange.ThrowUnexpectedResponse(SmtpConstants.Challenge);
                    }
                }
                else
                {
                    InExchange.ThrowIfUnexpectedResponse( );
                }
            }

            // send the password. expect back 235 = login successful.
            message =
                Convert.ToBase64String(
                    Encoding.ASCII.GetBytes(Password.ToCharArray( ))) +
                SmtpConstants.CrLf;
            InExchange.ExpectedResponseCodes =
                new ExpectedResponseCodes(SmtpConstants.Authenticated);
            InExchange.SendReceive(message);
            InExchange.ThrowIfUnexpectedResponse( );

            // is authenticated.
            SignalAuthenticatedEvent(new MailEventArgs(MailEvent.Authenticated));
        }
Пример #2
0
        // -------------------- MailServerLogin --------------------------------
        private void MailServerLogin( )
        {
            // send username ...
            mSockEx.ExpectedResponseCodes = new ExpectedResponseCodes(PopConstants.Ok);
            mSockEx.SendReceive("user " + m_credential.User + PopConstants.CrLf);
            if (mSockEx.ExpectedResponseCode == null)
            {
                mSockEx.ThrowUnexpectedResponse( );
            }

            // send password
            mSockEx.ExpectedResponseCodes = new ExpectedResponseCodes(PopConstants.Ok);
            mSockEx.SendReceive("pass " + m_credential.Pass + PopConstants.CrLf);
            mSockEx.ThrowIfUnexpectedResponse( );
        }