internal static void ParseBanner(string banner, out SmtpConnectivityStatusCode statusCode, out string details)
        {
            banner = banner.Trim();
            if (banner.Length < 3)
            {
                statusCode = SmtpConnectivityStatusCode.Error;
                details    = Strings.InvalidSmtpBanner(banner);
                return;
            }
            switch (banner[0])
            {
            case '2':
                statusCode = SmtpConnectivityStatusCode.Success;
                details    = banner;
                return;

            case '4':
            case '5':
                statusCode = SmtpConnectivityStatusCode.Error;
                details    = banner;
                return;
            }
            statusCode = SmtpConnectivityStatusCode.Error;
            details    = Strings.InvalidSmtpBanner(banner);
        }
 internal static void TestEndPoint(IPEndPoint endPoint, out SmtpConnectivityStatusCode statusCode, out string details)
 {
     statusCode = SmtpConnectivityStatusCode.Success;
     details    = string.Empty;
     using (Socket socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp))
     {
         try
         {
             socket.Connect(endPoint);
             if (!socket.Connected)
             {
                 statusCode = SmtpConnectivityStatusCode.Error;
                 details    = Strings.UnableToConnect;
             }
             else
             {
                 byte[] array   = new byte[2000];
                 int    count   = socket.Receive(array, array.Length, SocketFlags.None);
                 string @string = Encoding.ASCII.GetString(array, 0, count);
                 TestSmtpConnectivity.ParseBanner(@string, out statusCode, out details);
             }
         }
         catch (SocketException ex)
         {
             statusCode = SmtpConnectivityStatusCode.Error;
             details    = ex.Message;
         }
     }
 }
 private void WriteErrorAndAddMonitoringEvent(Exception exception, ErrorCategory errorCategory, SmtpConnectivityStatusCode statusCode)
 {
     this.monitoringData.Events.Add(new MonitoringEvent("MSExchange Monitoring SmtpConnectivity", (int)statusCode, EventTypeEnumeration.Error, exception.Message));
     base.WriteError(exception, errorCategory, null);
 }