/// <summary> /// Is called when EHLO/HELO command has completed. /// </summary> /// <param name="op">Asynchronous operation.</param> /// <exception cref="ArgumentNullException">Is raised when <b>op</b> is null reference.</exception> private void ConnectCompleted(TCP_Client.ConnectAsyncOP op) { if (op == null) { throw new ArgumentNullException("op"); } try { // Connect failed. if (op.Error != null) { try { // Release IP usage. m_pServer.RemoveIpUsage(m_pActiveTarget.Target.Address); m_pActiveTarget = null; // Connect failed, if there are more target IPs, try next one. if (!this.IsDisposed && !this.IsConnected && m_pTargets.Count > 0) { BeginConnect(); } else { Dispose(op.Error); } } catch (Exception x1) { Dispose(x1); } } // Connect suceeded. else { // Do EHLO/HELO. string hostName = string.IsNullOrEmpty(m_pLocalBindInfo.HostName) ? Dns.GetHostName() : m_pLocalBindInfo.HostName; SMTP_Client.EhloHeloAsyncOP ehloOP = new SMTP_Client.EhloHeloAsyncOP(hostName); ehloOP.CompletedAsync += delegate(object s, EventArgs <SMTP_Client.EhloHeloAsyncOP> e) { EhloCommandCompleted(ehloOP); }; if (!m_pSmtpClient.EhloHeloAsync(ehloOP)) { EhloCommandCompleted(ehloOP); } } } catch (Exception x) { Dispose(x); } }