C# 如何检查SMTP服务器是否已启动并正在运行

C# 如何检查SMTP服务器是否已启动并正在运行,c#,smtp,C#,Smtp,我当前正在使用以下代码检查SMTP服务器是否已启动并正在运行,然后再发送邮件: public static bool ValidateSMTPServer() { bool valid = false; System.Net.Sockets.TcpClient smtpTest = new System.Net.Sockets.TcpClient(); try {

我当前正在使用以下代码检查SMTP服务器是否已启动并正在运行,然后再发送邮件:

 public static bool ValidateSMTPServer()
        {
            bool valid = false;
            System.Net.Sockets.TcpClient smtpTest = new System.Net.Sockets.TcpClient();
            try
            {
                smtpTest.Connect(ConfigurationManager.AppSettings["SMTPServerName"], Convert.ToInt32(ConfigurationManager.AppSettings["PortNumber"]));
                return true;

            }
            catch
            {
                return valid;
            }
            finally
            {
                smtpTest.Close();
            }

        }
但问题是,如果服务器未运行,则需要大约25秒才能做出响应。这会降低我的页面性能。在发送邮件之前,我只需点击按钮即可完成此操作。 还有比这更好的方法吗?或者我可以对现有代码做一些更改

如果服务器未运行,它将转到catch部分,我将我的标志返回false,这意味着smtp已关闭..是否有任何方法可以获取服务器未运行的状态代码…SMTPException也是我尝试的..如果我使用相同的程序中断

感谢您的帮助。

  • 您可以在后台进行检查,并将其存储在静态变量中。以循环的方式进行,你就避免了等待

  • 可以使用本地SMTP服务器更改设置,以将其从放置文件夹中取出。大量的伪负片,但至少可以在服务器停机/过载/启动时发送。我个人更喜欢这样。我用这种方式已经很久了——遗憾的是,微软正在慢慢退出他们的SMTP服务。如果服务器可以将电子邮件放入文件夹中,然后随着时间的推移发送出去,那就太好了


在更大的设置中,SMTPO SERVERE不应关闭,因为它是负载平衡器后面的集群;)

我理解你的观点,我也在这样做…我对上述场景的意图是,如果服务器关闭,我应该通知用户…SMTP服务器关闭..他们可以稍后或过一段时间再试。。。