SmtpClient.Send将发送消息和超时

本文关键字:消息 超时 Send SmtpClient | 更新日期: 2023-09-27 18:15:17

我正在更新一些旧代码与SQL集成。我所在的公司偶尔会发送大量电子邮件,这会大大降低邮件服务器的速度。如果电子邮件开始增加,我们想把它们排到数据库中。在测试对代码的一些更改时,我注意到我将收到电子邮件并且客户端仍然会超时。这将导致问题,因为客户端随后将电子邮件设置在队列中,当另一个服务试图清理数据库时,我将稍后收到它。

SmtpClient emailClient = new SmtpClient(Settings.SmtpServer);
emailClient.Timeout = 100;
bool sent = false;
try
{
    using (Impersonate imp = DA.GetImpersonator())
    {
        emailClient.Send(message);
        sent = true;
    }
}
catch (SmtpException) { }
finally
{
    if (sent)
    {
        email.IsSent = true;
        DA.Save(email);
    }
}

10次测试中,9次超时,1次成功;我收到了7封邮件

SmtpClient.Send将发送消息和超时

从规范来看,超时只承诺方法将在该时间内返回,而不保证发送已停止。

如果您需要发送多封邮件,请考虑使用SendAsync方法并订阅SendCompleted事件来确定发送邮件的成功/失败。