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