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); }
private bool AuthenticatePlain(NetworkCredential credentials) { var capabilities = _client.ServerCapability; var username = credentials.UserName; var password = credentials.Password; var auth = username + "\0" + username + "\0" + password; var encodedAuth = Base64Encoder.Encode(auth); if (capabilities.IsInitialClientResponseSupported) { var text = string.Format("AUTHENTICATE PLAIN {0}", encodedAuth); var command = new ImapCommand(text); return(_client.SendAndReceive(command).IsOk); } var authCommand = new ImapCommand("AUTHENTICATE PLAIN"); var response = _client.SendAndReceive(authCommand); if (response.IsContinuation) { var command = new BlankImapCommand(encodedAuth); _client.Send(command); return(_client.Receive().IsOk); } return(false); }
/// <summary> /// Authenticates the client to the server using the XOAUTH mechanism. /// </summary> /// <param name = "key">The XOAUTH authetication key.</param> /// <returns>Returns true on success, false otherwise.</returns> public bool AuthenticateXOAuth(string key) { if (_client.ServerCapability.IsInitialClientResponseSupported) { var text = string.Format("AUTHENTICATE XOAUTH {0}", key); var command = new ImapCommand(text); return(_client.SendAndReceive(command).IsOk); } else { var text = string.Format("AUTHENTICATE XOAUTH"); var command = new ImapCommand(text); var reader = _client.SendAndReceive(command); if (reader.IsContinuation) { var auth = new BlankImapCommand(key); return(_client.SendAndReceive(auth).IsOk); } return(false); } }
/// <summary> /// Send the DONE command to the server on a seperate thread, which will release the IDLE lock. /// </summary> public void StopIdleAsync() { var command = new BlankImapCommand("DONE"); SendAsync(command); }