SmtpClient.Send将发送消息AND超时

时间:2011-11-21 22:28:05

标签: c# email timeout smtpclient

我正在更新一些与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封电子邮件。

1 个答案:

答案 0 :(得分:4)

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

如果您需要发送多封电子邮件,请考虑使用SendAsync method并订阅SendCompleted event以确定发送电子邮件是否成功。