/// <summary> /// Start processing relay message. /// </summary> /// <param name="state">User data.</param> internal void Start(object state) { try{ m_pSmtpClient = new SMTP_Client(); m_pSmtpClient.LocalHostName = m_pLocalBindInfo.HostName; if (m_pServer.Logger != null) { m_pSmtpClient.Logger = new Logger(); m_pSmtpClient.Logger.WriteLog += new EventHandler <WriteLogEventArgs>(SmtpClient_WriteLog); } LogText("Starting to relay message '" + m_pRelayItem.MessageID + "' from '" + m_pRelayItem.From + "' to '" + m_pRelayItem.To + "'."); // Get all possible target hosts for active recipient. List <string> targetHosts = new List <string>(); if (m_RelayMode == Relay_Mode.Dns) { foreach (string host in SMTP_Client.GetDomainHosts(m_pRelayItem.To)) { try{ foreach (IPAddress ip in Dns_Client.Resolve(host)) { m_pTargets.Add(new Relay_Target(new IPEndPoint(ip, 25))); } } catch { // Failed to resolve host name. LogText("Failed to resolve host '" + host + "' name."); } } } else if (m_RelayMode == Relay_Mode.SmartHost) { foreach (Relay_SmartHost smartHost in m_pSmartHosts) { try{ m_pTargets.Add(new Relay_Target(new IPEndPoint(Dns_Client.Resolve(smartHost.Host)[0], smartHost.Port), smartHost.SslMode, smartHost.UserName, smartHost.Password)); } catch { // Failed to resolve smart host name. LogText("Failed to resolve smart host '" + smartHost.Host + "' name."); } } } BeginConnect(); } catch (Exception x) { Dispose(x); } }