void Authenticate() //8 { //if no credentials were supplied, try anonymous //servers don't appear to anounce that they support anonymous login. if (connection.credentials != null) { while (++currentModule < connection.authenticationModules.Length) { //only authenticate if the auth protocol is supported ISmtpAuthenticationModule module = connection.authenticationModules[currentModule]; if (!connection.AuthSupported(module)) { continue; } NetworkCredential credential = connection.credentials.GetCredential(host, port, module.AuthenticationType); if (credential == null) { continue; } Authorization auth = connection.SetContextAndTryAuthenticate(module, credential, m_OuterResult); if (auth != null && auth.Message != null) { IAsyncResult result = AuthCommand.BeginSend(connection, connection.authenticationModules[currentModule].AuthenticationType, auth.Message, authenticateCallback, this); if (!result.CompletedSynchronously) { return; } LineInfo info = AuthCommand.EndSend(result); if ((int)info.StatusCode == 334) { authResponse = info.Line; if (!AuthenticateContinue()) { return; } } else if ((int)info.StatusCode == 235) { module.CloseContext(connection); connection.isConnected = true; break; } } } //try anonymous if didn't authenticate //if (!connection.isConnected) { // throw new SmtpException(SR.GetString(SR.SmtpAuthenticationFailed)); // } } connection.isConnected = true; InvokeCallback(); }
private void Authenticate() { //if no credentials were supplied, try anonymous //servers don't appear to anounce that they support anonymous login. if (_connection._credentials != null) { while (++_currentModule < _connection._authenticationModules.Length) { //only authenticate if the auth protocol is supported ISmtpAuthenticationModule module = _connection._authenticationModules[_currentModule]; if (!_connection.AuthSupported(module)) { continue; } NetworkCredential credential = _connection._credentials.GetCredential(_host, _port, module.AuthenticationType); if (credential == null) { continue; } Authorization auth = _connection.SetContextAndTryAuthenticate(module, credential, _outerResult); if (auth != null && auth.Message != null) { IAsyncResult result = AuthCommand.BeginSend(_connection, _connection._authenticationModules[_currentModule].AuthenticationType, auth.Message, s_authenticateCallback, this); if (!result.CompletedSynchronously) { return; } LineInfo info = AuthCommand.EndSend(result); if ((int)info.StatusCode == 334) { _authResponse = info.Line; if (!AuthenticateContinue()) { return; } } else if ((int)info.StatusCode == 235) { module.CloseContext(_connection); _connection._isConnected = true; break; } } } } _connection._isConnected = true; InvokeCallback(); }