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); }