/// <summary>
 /// Raises Error event.
 /// </summary>
 /// <param name="type">Error type.</param>
 /// <param name="affectedAddresses">Affected email addresses.</param>
 /// <param name="errorText">Error text.</param>
 protected void OnFaulted(SmtpErrorType type, string[] affectedAddresses, string errorText)
 {
     // we must lock write(add), becuse multiple Threads may raise OnError same time.
     lock (SendErrors)
     {
         SendErrors.Add(new SmtpError(type, affectedAddresses, errorText));
     }
 }
        //-------------------------------------------------------------------------------------------------------------------------
        //
        //-------------------------------------------------------------------------------------------------------------------------

        /// <summary>
        ///
        /// </summary>
        /// <param name="to"></param>
        /// <param name="from"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public bool Send(string[] p_receipients, string p_sender, Stream p_message)
        {
            var _result = true;

            SendErrors.Clear();

            Hashtable _rcptPerServer = GetSameDomain(p_receipients);

            // Loop through the list of servers where we must send messages
            foreach (ArrayList _sameAddresses in _rcptPerServer.Values)
            {
                string[] _reciepients = new string[_sameAddresses.Count];
                _sameAddresses.CopyTo(_reciepients);

                p_message.Seek(0, SeekOrigin.Begin);
                if (SendMessageToServer(_reciepients, p_sender, p_message) == false)
                {
                    _result = false;
                    break;
                }
            }

            return(_result);
        }