【问题标题】:How to check the health of an SmtpClient and credentials without sending an email?如何在不发送电子邮件的情况下检查 SmtpClient 和凭据的运行状况?
【发布时间】:2019-12-04 15:56:25
【问题描述】:

在代码中是否有办法检查 SmtpClient 和 NetworkCredential 作为 HealthCheck 的一部分是否有效。 我不是特别想每 10 分钟生成一次电子邮件,但我想知道服务器是响应式的,更重要的是 NetworkCredentials 没有在我们不知道的情况下被重置 :-)

当前代码块是这样的;但据我所知,这并没有从服务中发出任何调用。

public bool IsHealthy()
{
    try
    {
        var smtp = new SmtpClient(this.options.SmtpHost, this.options.SmtpPort)
        {
            UseDefaultCredentials = false,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            Credentials = new NetworkCredential(
                this.options.EmailUserName, 
                this.options.EmailPassword,
                this.options.EmailDomain)
         };

         // Should really be calling something in here?
         smtp.Dispose();
         return true;
    }
    catch
    {
        return false;
    }
}

【问题讨论】:

  • 你可以 ping 服务器(或 SMTP 端口上的 telnet)来检查它是否还活着。当然,它可能会在几秒钟后死掉,所以它永远不是 100% 的保证。在您真正尝试建立特定连接之前,您永远无法确定是否会建立连接。但作为一般的健康检查,它可能就足够了。如果可靠性是一个大问题,那么在 C# 应用程序本身中,您可以做更多的事情来处理故障(例如实现重试、指数退避、断路器等)。
  • stackoverflow.com/questions/372742/… 似乎您必须这样做并尝试使用谷歌搜索 - 已被多次询问和回答。
  • 至于凭证,为什么会被重置?您不是使用具有固定密码的服务帐户吗?这听起来更像是组织流程问题,而不是技术问题。
  • 凭据 :-) 是的,它们不应该改变;但在过去他们有,我们只是确保我们不会再次被抓住......
  • 大,我怀疑它可能涉及下拉一层。我将查看我错过的另一个问题并回复答案。

标签: c# asp.net-core health-monitoring


【解决方案1】:

cmets部分的人是正确的,以前有人问过 [Can I test SmtpClient before calling client.Send()?

没有让我检查网络凭据,但至少知道 smtp 服务器可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-08
    • 2020-02-20
    • 2017-09-24
    • 2013-06-23
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多