// -------------------------- 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)); }