c# - SmtpClient.Send 将发送消息并超时

标签 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 封电子邮件。

最佳答案

从规范上看,timeout只是 promise 方法会在该时间内返回,并不表示已经停止发送。

如果您需要发送多封电子邮件,请考虑使用 SendAsync method并订阅 SendCompleted event判断邮件发送成功/失败。

关于c# - SmtpClient.Send 将发送消息并超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8219413/

相关文章:

c# - 第二次在 System.Data.Entity.Database 上调用 ExecuteSqlCommand 时出错

javascript - 如果按下任何按钮,自动隐藏一个 div

python - Selenium webdriver 在超时后停止

c# - 如何不限制 maxBufferSize 和 maxReceivedMessageSize

c# - 无法构建带有 project.json 的 .NET 项目

c# - 将 Boo 方法添加到 C# 多播委托(delegate)时出错

html - iPhone 电子邮件上的 100% 宽度

java - 如何使用javax.mail解析电子邮件内容?

email - 退回电子邮件处理值得吗?

php - 如何知道连接何时被 peer 在 php 中重置?